Tôi đang lộn xộn với đường ray 2.3 mẫu và muốn có thể sử dụng tên ứng dụng dưới dạng biến trong mẫu của tôi, vì vậy khi tôi sử dụng ...
rails appname -m path/to/template.rb
... Tôi muốn có thể truy cập tên ứng dụng bên trong template.rb. Bất cứ ai biết làm thế nào để làm điều này?
Cảm ơnTruy cập tên ứng dụng từ bên trong mẫu đường ray khi tạo ứng dụng đường ray
Trả lời
Cảm ơn câu trả lời. Mike Woodhouse, bạn đã rất thân thiết. Hóa ra, tất cả các bạn cần làm để truy cập appname từ bên trong mẫu ray của bạn là ...
@root.split('/').last
Biến @root là điều đầu tiên tạo ra khi khởi tạo mẫu và có sẵn bên đường ray mẫu của bạn. RAILS_ROOT không hoạt động.
RAILS_ROOT sẽ cung cấp cho bạn đường dẫn tuyệt đối vào thư mục gốc của bạn. Tên ứng dụng của bạn sẽ là phần của chuỗi sau '/' cuối cùng mà bạn có thể lấy theo bất kỳ cách nào.
CHỈNH SỬA: Không đủ để hoàn thành công việc. Mike và Dan viết nó ra bên dưới.
Có lẽ một cách đơn giản hơn, nhưng điều này dường như làm việc:
RAILS_ROOT.split('/').last
EDIT: Bleah - đây đã bình chọn xuống một lần, và các cử tri đã đúng. Nếu tôi đọc câu hỏi cẩn thận hơn, tôi đã nhận thấy các phần tử 2.3 và template.rb. Xin lỗi.
Tôi cho rằng RAILS_ROOT sẽ không được tạo tại thời điểm bạn cần tên ứng dụng. Nhìn vào ruby\lib\ruby\gems\1.8\gems\rails-2.2.2\bin\rails
, tuy nhiên, hầu hết các điều đầu tiên xảy ra là thế này:
app_path = ARGV.first
Nó được sử dụng ở phần cuối của kịch bản để cho phép một chdir và đóng băng được thực hiện nếu cần thiết - Tôi không biết tôi có thể Insta -Đóng băng lúc sáng tạo, vì vậy tôi đã học được điều gì đó mới ít nhất. ARGV
sau đó được sử dụng ở đây:
Rails::Generator::Scripts::Generate.new.run(ARGV, :generator => 'app')
đó nhanh chóng được chúng ta đến nơi argv thực sự xử lý:
rails-2.3.1\lib\rails_generator\scripts.rb
nơi tôi thấy
Rails::Generator::Base.instance(options[:generator], args, options).command(options[:command]).invoke!
Một nơi nào đó dưới đây có lẽ là nơi templating được xử lý. Tôi e rằng tôi đang ở giai đoạn rất sớm với 2,3 và khuôn mẫu là một lĩnh vực mà tôi chưa xem xét.
Điều đó có giúp ích gì hơn nỗ lực đầu tiên của tôi không?
Tôi tin rằng cách ưu tiên bây giờ là gọi Rails.root và không còn RAILS_ROOT nữa. Rõ ràng một người nào đó trên đường ray hành tinh có ác cảm với chữ hoa hoặc một số lý do quan trọng tương tự. Tính đến 2.3.5, cả hai dường như hoạt động.
Tôi đang tìm câu trả lời cho câu hỏi này. không may câu trả lời ở trên (@root) dường như không hoạt động trong Rails 3.
Dưới đây là các biến bạn có thể truy cập trong Rails 3 mẫu ứng dụng (thậm chí dễ dàng hơn):
@app_name
@app_path
Trong Rails 3, sử dụng thuộc tính app_name
.
Xem tài liệu cho số Rails::Generators::AppGenerator.
tôi đã nhận được lỗi
`template': undefined local variable or method `app_name'
ruby 1.9.2p290, Rails 3.2.11, thor 0.18.0, Windows
nhưng với đường ray 2.3 máy phát điện:
class DynanavGenerator < Rails::Generators::Base
(có thể Không chắc liệu lỗi này có xảy ra dưới đường ray 3.0.9 hay cũ hơn) định nghĩa lớp đã thay đổi thành:
class DynanavGenerator < Rails::Generators::NamedBase
mà sau đó đã đưa:
Không có giá trị cung cấp cho các đối số cần thiết 'tên'
sau đó tôi đã thêm một 'danh' ("cái gì đó" dưới đây):
rails generate dynanav something --force
đã đưa ra lỗi ban đầu, vì vậy tôi đã thêm:
def app_name
@name.titleize
end
vào lớp học và tất cả đều tốt.
Tôi chạy vào một vấn đề tương tự, không ai trong số các biến được liệt kê ở trên là có sẵn cho tôi trong Rails 4. Tôi thấy rằng @name
đã có sẵn trong khi chạy
rails plugin new engines/dummy -m my_template.rb
Có biến hữu ích khác có sẵn từ bên trong mẫu . Bạn có thể xem cho chính mình và chơi xung quanh bằng cách sử dụng pry
. Bên trong mẫu của tôi, tôi thêm
require 'pry'; binding.pry
và sau đó chạy ls
để hiển thị một danh sách các biến Ví dụ có sẵn
ls -i
instance variables:
@_initializer @app_path @behavior @destination_stack @extra_entries @name @output_buffer @shell
@_invocations @args @builder @dummy_path @gem_filter @options @rails_template @source_paths
@after_bundle_callbacks @author @camelized @email @in_group @original_name @shebang
- 1. tạo Rdoc cho ứng dụng đường ray
- 2. đường ray truy cập tên xem bên trong một phần
- 3. Xuất jSON trong ứng dụng đường ray
- 4. Hợp nhất hai ứng dụng đường ray
- 5. Tôi cần một đường dẫn đầy đá quý từ bên trong một ứng dụng đường ray
- 6. Phân tích ứng dụng đường ray
- 7. Giám sát nhiều ứng dụng đường ray
- 8. Sử dụng syslog trong ứng dụng đường ray
- 9. Hiệu suất ứng dụng đường ray đơn giản trên heroku
- 10. Xác thực đường ray qua các ứng dụng/máy chủ
- 11. Điều chỉnh yêu cầu POST trong ứng dụng đường ray
- 12. ký hiệu đơn giữa ứng dụng Vbulletin và đường ray
- 13. Thực hiện lại lệnh FLUSHALL trong ứng dụng đường ray
- 14. Làm thế nào để nội tuyến css khi sử dụng đường ray tài sản đường ray
- 15. Tải lại một phần trong ứng dụng đường ray
- 16. "Thứ tự tab" trong ứng dụng đường ray
- 17. tweet liên kết này trong đường ray ứng dụng
- 18. Đường dẫn tài sản truy cập từ Bộ điều khiển đường ray
- 19. Đường ray: sử dụng "content_for" sau "tương ứng" bên trong bố cục
- 20. Cách tạo ứng dụng Edge ray?
- 21. Lưu HASH vào Redis trên ứng dụng đường ray
- 22. Mẫu Tìm kiếm Đường ray
- 23. Đường ray với mẫu Underscore.js
- 24. Mất phiên trong đường ray 2.3.2 ứng dụng sử dụng tên miền phụ
- 25. Đường ray: Mẫu ứng dụng/trình tạo tập lệnh với HAML?
- 26. Cách chuyển đổi ứng dụng đường ray thành đá quý?
- 27. Không thể chạy đường ray 2.x ứng dụng
- 28. đặt tên tệp cho tệp đã tải xuống trong ứng dụng đường ray
- 29. Tạo tuyến đường ray đến một URL bên ngoài
- 30. Cách xem các truy vấn mongoid trong di tích mới trong ứng dụng đường ray
Câu trả lời này là thời gian chứng minh, nên một trong những hàng đầu –