2017-03-23 40 views
1

注意:如果這是重複的道歉,我找不到答案。警告:新手到RoR,答案可能非常明顯。Ruby on Rails:將變量傳遞給可以是不同類的部分

我有一個部分,_show_address_on_map,它顯示了一個人在地圖上的位置。但是,此人可以是@employee@client,可以從employee_addresses控制器或client_addresses控制器調用。取決於它們中的哪一個,在部分內需要改變一些事情。

employee_addresses/show.html.erb我稱之爲局部與

<%= render :partial => ".../show_on_map", currentUser: @employee %> 

client_addresses/show.html.erb我稱之爲局部與

<%= render :partial => ".../show_on_map", currentUser: @client %> 

現在在部分(_show_address_on_map)我嘗試做currentUser if語句:

<% if currentUser.is_a?(Client) %> 
    #do something with @client 
<% else %> 
    #do something with @employee 
<% end %> 

這給了我錯誤"undefined local variable or method 'currentUser'"

如何正確定義currentUser,以便它可以是@employee或@client所描述的?還是我在做其他事情?

回答

4
<%= render :partial => ".../show_on_map", locals: {current_user: @client}%> 

:)

而且作爲Ruby/Rails約定,使用under_score而不是駝峯

+1

又名'snake_case'。 – mmichael

+0

感謝您注意駱駝套! – Teresa

+2

只需添加到Ruslan的答案中,本地哈希的原因是爲模板分配「本地範圍」變量,因此您將永遠不會執行類似於{@current_user:@client}(無法分配給實例var)的內容。另外,值得注意的是,由於Rails對其渲染系統的限制,你不能使用某些方法來檢查諸如「defined?current_user」之類的變量,因爲這些傳遞給模板的本地變量被賦值爲「local_assigns」哈希值。相反,您必須檢查「local_assigns」散列。防爆。 「如果local_assigns.has_key?:current_user」。 – bkunzi01

1

可以使用:object到的數據發送到局部,這將定義一個變量具有相同名稱的部分

<%= render :partial => ".../show_on_map", :object => @client %> 

所以在你的部分,你可以參考:object與部分0123名送,你可以做這樣的事情:

<% if show_address_on_map.is_a?(Client) %> 
    #do something with @client 
<% else %> 
    #do something with @employee 
<% end %> 

而且將包含在:object發送的@client,這樣你就可以控制哪些動作在局部做。

相關問題