所以我有两个模型,属于组织的用户(has_many用户)。我使用partial来显示属于任何一个特定组织的所有用户,如果我只输出名称(它正确命名所有用户),这可以正常工作。但是,当我更改部分代码以提供link_to user.name时,返回的链接是指向父组织的所有链接,而不是单个子对象的链接。我做错了什么?
相关代码:
组织控制器
def show
@organization = Organization.find(params[:id])
@users_index = User.joins(:organization).where(organizations: {id: @organization.id})
end
Organization.show.html.erb
<% provide(:title, @organization.organization_name) %>
<h1><%= @organization.organization_name %></h1>
<h2>Your Organization's Users:</h2>
<%= render partial: "users_index", collection: @users_index %>
_users_index.html.erb代码:
<p class="users"><%= link_to users_index.name %></p>
答案 0 :(得分:1)
如果您正确设置了您的关系,那么您可以使用:
@users_index = @organization.users
然后你需要遍历@users_index并将其传递给你的部分。
@users_index.each do |user|
<%= render "users_index", :user => user %>
end
在你的部分内容中,改为:
<p class="users"><%= link_to user.name, user %></p>
答案 1 :(得分:0)
我认为问题的核心,正如另一个答案中提到的那样,是link_to
:
<%= link_to users_index.name %>
link_to
辅助方法基本上是这样的:
<%= link_to "Your Link Text", link_path %>
我不知道您的应用程序如何在没有您的定义的情况下加载正确的链接路径,无论您是否将其添加到帮助程序中。
我认为你的渲染链接将指向&#34;#&#34;而不是&#34;父对象&#34;正如你所提到的那样。
-
<强>修正强>
我这样做:
#app/views/organization/show.html.erb
<%= render partial: "users_index", collection: @users_index, as: :user %>
#app/views/organization/_users_index.html.erb
<p class="users"><%= link_to user.name, user %></p>
这应该为您设置正确的link_to
辅助方法
-
<强>模型强>
此外,我还会解决模型中的associations
您目前正以最低效的方式呼叫users
。 ActiveRecord associations努力解决这个问题:
#app/models/user.rb
Class User < ActiveRecord::Base
belongs_to :organization
end
#app/models/organization.rb
Class Organization < ActiveRecord::Base
has_many :users
end
这将允许您拨打以下电话:
#app/controllers/organizations_controller.rb
Class OrganizationsController < ApplicationController
def show
@organization = Organization.find params[:id]
@users_index = @organization.users
end
end