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

ただし、以前に持っていたブロック引数をパーシャルに渡していないため、これは機能しません。

どうすればパーシャルに渡すことができますか?

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

View partial locals を見てください :: http://guides.rubyonrails.org/layouts_and_rendering.html#passing-local-variables

locals を使用して、任意の数の変数を渡すことができます。

上記の答えはビューローカルを渡すことですが、それらは省略形で定義されています (明示的ではありません)。

このようにコードを書き直すと、どの変数がビュー パーシャルに渡されるかがより明確になります。次に、部分的な :: で「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 に答える