将块传递给部分

时间:2012-11-21 17:07:02

标签: ruby-on-rails partial-views

我想根据条件将局部视图渲染到视图中。起初我有这个看起来很好的视图

<%= 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 %>

然而,这不起作用,因为我没有将我之前的块参数传递给我的部分。

我如何将它传递给我的部分?

2 个答案:

答案 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