为什么link_to在部分使用时会返回父对象而不是实际对象的链接?

时间:2014-07-27 07:41:37

标签: ruby-on-rails partial-views link-to

所以我有两个模型,属于组织的用户(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>

2 个答案:

答案 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

<%= 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

您目前正以最低效的方式呼叫usersActiveRecord 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