0

我想根据条件将部分渲染到视图中。起初我有这个渲染得很好的观点

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

但是,这不起作用,因为我没有将之前的 block 参数传递给我的部分。

我怎样才能将它传递给我的部分?

4

2 回答 2

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) %>
于 2012-11-21T17:09:55.523 回答
0

看看局部局部变量 :: http://guides.rubyonrails.org/layouts_and_rendering.html#passing-local-variables

您可以使用局部变量传递任意数量的变量。

上面的答案是传递视图局部变量,尽管它们被定义为简写形式(未明确)。

您可以像这样重新编写代码,这样可以更清楚地将哪些变量传递给您的视图部分。然后,您可以在部分 :: 中访问“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 
于 2012-11-21T17:14:58.407 回答