将变量从控制器传递到局部视图轨道

时间:2017-12-06 02:21:27

标签: ruby-on-rails partials

我坚持将变量值从控制器传递给部分。我拥有来自控制器:SkillSetsController

的@skillSetData技能集数据库中的所有数据
def skillsetdata
    @skillSetData = SkillSet.all
end

以下关于skill_set / skillsetdata.html.erb的代码显示所有数据。

<% @skillSetData.each do |single_skill| %>

    <option value="<%= single_skill.skillname %>"><%=single_skill.skillname %></option>

<% end %>

但是如果skillsetdata.html.erb是部分ie:_skillsetdata.html.erb,我无法传递变量。我写的_skillsetdata的代码是:

<% skills_set_data.each do |single_skill| %>
   <option value="<%= single_skill.skillname %>">
      <%=single_skill.skillname %>
   </option>
<% end %>

我想让它变得局部,因为它具有必须在各种其他页面上呈现的下拉列表。我想要使​​用的其中一个页面是:static_pages / home.html.erb,它来自不同的控制器,即:staticPages。我在帮助后尝试的代码是:

<%= render partial: 'skill_sets/skillsetdata', locals: { skills_set_data:@skillSetData } %>

但我收到的错误是:   nil的未定义方法`each':NilClass 在skill_sets / _skillsetdata.html.erb中 在尝试加载home.html.erb时。我无法从部分页面中的不同页面之间传递数据。

任何有关示例代码的帮助都会有所帮助。

2 个答案:

答案 0 :(得分:0)

要将实例变量传递给局部变量,您可以使用locals

# view from
<%= render partial: 'skillsetdata', locals: { skills_set_data: @skillSetData } %>

在本地,您会收到该实例变量的值,该变量现在是本地变量:

# partial
<% skills_set_data.each do |single_skill| %>
  <option value="<%= single_skill.skillname %>">
    <%=single_skill.skillname %>
  </option>
<% end %>

答案 1 :(得分:0)

我想你在这里遇到问题:skill_sets/skillsetdata

<%= render partial: 'skill_sets/skillsetdata', locals: { skills_set_data:@skillSetData } %>

正如你写的那样:

  

以下关于skill_set / skillsetdata.html.erb的代码显示所有数据。

正确的名称是:skill_set/skillsetdata

这是正确的名称:

<%= render partial: 'skill_set/skillsetdata', locals: { skills_set_data:@skillSetData } %>