2011-11-08 34 views
25

Đây là hình thức của tôi phần:Rails: Làm thế nào để xác định bộ điều khiển/hành động theo quan điểm

<%= f.simple_fields_for :photo_attributes, :html => { :multipart => true } do |d| %> 
    <%= d.label :image, :label => 'Upload logo', :required => false %> 
    <%= d.file_field :image, :label => 'Image, :required => false', :style => 'margin-bottom:2px' %> 
    <%= d.input :image_url, :label => 'Billed URL', :required => false %> 
<% end %> 

Nếu hành động là chỉnh sửa tôi muốn hiển thị này thay vì:

<%= f.simple_fields_for :photo, :html => { :multipart => true } do |d| %> 
    <%= d.label :image, :label => 'Upload logo', :required => false %> 
    <%= d.file_field :image, :label => 'Image, :required => false', :style => 'margin-bottom:2px' %> 
    <%= d.input :image_url, :label => 'Billed URL', :required => false %> 
<% end %> 

Làm thế nào tôi có thể đạt được điều này ?

Trả lời

26

Thông thường biểu mẫu chỉ chứa một phần, không phải thẻ biểu mẫu hoặc trường cho, nhưng nếu bạn không có cách nào khác, bạn luôn có thể xem những gì params[:action] hiện được đặt và hoạt động tương ứng.

7

Bạn có thể viết một cái gì đó giống như

<%- form_url = @object.new_record? ? :photo_attributes : :photo %> 
<% f.simple_fields_for form_url, :html => { :multipart => true } do |d| %> 

Nghĩa là, nếu bạn có một @object để kiểm tra chống lại. Nếu không, bạn có thể sử dụng action_name (và thậm chí controller_name).

Vì vậy, một cái gì đó như:

<%- form_url = action_name == :edit ? :photo : :photo_attributes %> 
<% f.simple_fields_for form_url, :html => { :multipart => true } do |d| %> 

Hope this helps.

90

current_page?(action: 'edit')

Xem ActionView::Helpers::UrlHelper#current_page?

Rails cũng làm cho các phương pháp controller_path, controller_name, action_name sẵn để sử dụng trong giao diện.

+3

này nên được sự chấp nhận answer-- 'current_page?' thật tuyệt vời. – thekingoftruth

+5

Hmm. Tôi đã nhìn thấy những trường hợp nó không hoạt động như mong đợi. tức là khi 'controller_name == 'site'' và' action_name ==' home'' nhưng 'current_page? (controller: 'site', action: 'home')' trả về false. – thekingoftruth

+0

Đồng ý. Câu trả lời này chính xác là những gì bạn đang tìm kiếm. –

0

Chỉ cần sử dụng @ _controller.action_name theo quan điểm

1

Rails 5: Hiển thị hành động trong tầm nhìn

<%= action_name %> 

Nếu tuyên bố trong tầm nhìn

<% if action_name == "edit" %> 
    This is an edit action. 
<% end %> 
Các vấn đề liên quan