Ruby on Rails:将变量传递给可以是不同类的部分

时间:2017-03-23 13:08:18

标签: ruby-on-rails

注意:如果这是重复的道歉,我无法找到答案。警告:RoR的新手,答案可能非常明显。

我有一个部分_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,如上所述?或者我做错了什么?

2 个答案:

答案 0 :(得分:4)

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

:)

同样作为ruby / rails惯例,使用under_score而不是camelCase

答案 1 :(得分:1)

您可以使用:object将数据发送到partial,这将定义一个与partial

同名的变量
<%= render :partial => ".../show_on_map", :object => @client %>

因此,在您的部分内容中,您可以使用部分:object的名称引用_show_address_on_map发送,您可以执行以下操作:

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

这将包含:object中发送的@client,因此您可以控制部分中的操作。