2012-11-21 90 views
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 %> 

但是,這是行不通的,因爲我沒有通過了我早些時候對我的偏見的論斷。

我怎樣才能將它傳遞給我的偏好?

+0

'高清render_readings_conditionally(當地人= {})',並通過當地人的哈希值作爲參數傳遞給你的助手。然後像這樣渲染它們:'render:partial =>'readings/three_phase',:locals => locals' could work? – MrYoshiji

回答

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) %> 
+0

出於某種原因,它仍然在_single_phase.html視圖中顯示未定義的本地方法f – zurik

+0

它實際上已經工作了,我刪除了:partial bit,只是渲染了'readings/single_phase',f:form想知道爲什麼它的工作方式沒有有:部分 – zurik

+0

我的不好,我更新了我的答案。這是因爲如果你使用'render:partial',你必須使用'locals'來傳遞部分變量(參見其他答案中給出的文檔) –

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 
+0

在這種情況下,我似乎不明白如何傳遞局部變量,請你詳細說明更適合我? – zurik