我想根据条件将局部视图渲染到视图中。起初我有这个看起来很好的视图
<%= simple_form_for [@customer, @reading], :html => { :class => 'form-horizontal' } do |f| %>
<%= f.input :customer_id, :editable => false, :value => @customer.id %>
<%= f.input :date_of_reading, :as => :date %>
<%= render 'readings/single_phase', f: f %>
<% end %>
我现在想根据条件将部分渲染到视图中。所以我在application.rb中创建一个辅助方法来进行条件检查
module ApplicationHelper
def render_readings_conditionally
if @customer.phase_type == 'Single Phase'
render :partial => 'readings/single_phase'
else
render :partial => 'readings/three_phase'
end
end
end
在我看来,我在那里修复了方法
<%= simple_form_for [@customer, @reading], :html => { :class => 'form-horizontal' } do |f| %>
<%= f.input :customer_id, :editable => false, :value => @customer.id %>
<%= f.input :date_of_reading, :as => :date %>
<%= render_readings_conditionally %>
<% end %>
然而,这不起作用,因为我没有将我之前的块参数传递给我的部分。
我如何将它传递给我的部分?
答案 0 :(得分:0)
只需这样重写:
def render_readings_conditionally(form)
if @customer.phase_type == 'Single Phase'
render 'readings/single_phase', f: form
else
render 'readings/three_phase', f: form
end
end
在你看来:
<%= render_readings_conditionally(f) %>
答案 1 :(得分:0)
查看部分本地人:: http://guides.rubyonrails.org/layouts_and_rendering.html#passing-local-variables
您可以使用本地传递任意数量的变量。
上面的答案是传递视图本地,虽然它们是用速记定义的(不是明确的)。
您可以像这样重写代码,这样可以更清楚地将哪些变量传递给您的视图部分。然后,您可以访问partial ::
中的“form_obj”对象 module ApplicationHelper
def render_readings_conditionally
if @customer.phase_type == 'Single Phase'
render :partial => 'readings/single_phase', :locals => { :form_obj => form }
else
render :partial => 'readings/three_phase', :locals => { :form_obj => form }
end
end