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

passing variable from controller to partial view rails

我无法将变量值从控制器传递给部分。我有来自控制器的@skillSetData 技能集数据库中的所有数据:SkillSetsController

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 是部分变量,我无法传递变量,即:_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:NilClass 的未定义方法“each” 在 skill_sets/_skillsetdata.html.erb 在尝试加载主页时。html.erb。我无法通过部分页面在不同页面之间传递数据。

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

要将实例变量传递给部分变量,您可以使用 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 %>

我猜你的问题在这里:skill_sets/skillsetdata

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

如您所写:

The code below on skill_set/skillsetdata.html.erb display all the data.

正确的名字是:skill_set/skillsetdata

这是正确的名字:

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