没有路由匹配错误:@ model.association与查询之间的区别?

时间:2016-01-27 22:06:25

标签: ruby-on-rails associations

从技术上讲,我可以让这个工作,但为什么我当前的代码不起作用让我困惑。我的活动中有多对多的关系<>用户。这是我的观点放弃,说没有路线匹配:缺少必需的键[:id] ...

<% @event_users.each do |event_user| %>
 <%= link_to event_user.user.try(:full_name), user_path(event_user.user) %>
<% end %>

这是我控制器中的代码。一种有效的方法,一种不起作用的方式。

@event = Event.find(params[:id])
@event_users = @event.event_users    # This does NOT work
# @event_users = EventUser.where(event_id: 14)     # This does work

这是我的控制器关系

class User < ActiveRecord::Base
  has_many :event_users, dependent: :destroy
  has_many :events, through: :event_users
end

class EventUser < ActiveRecord::Base
  belongs_to :user
  belongs_to :event

  validates :user, presence: true
  validates :event, presence: true
end

class Event < ActiveRecord::Base
  has_many :event_users
  has_many :users, through: :event_users
end

这里到底发生了什么,我必须查询并且不能使用该关联来创建链接?当我打印出文本时,我会得到相关数据(ID),所以它应该可以工作。我也在下面尝试了这个,它仍然不起作用。

<%= link_to event_user.user.try(:full_name), user_path(event_user.user_id) %>

1 个答案:

答案 0 :(得分:1)

您不需要查询@event.event_users,这就是has_many :through关联的用途,您只需使用@event对象来获取其用户:

<% @event.users.each do |user| %>
  <%= link_to user.full_name, user_path(user) %>
<% end %>

注意,您也可以将对象传递给link_to,rails会自动使用帮助程序创建到users#show的路径,如下所示:

<%= link_to user.full_name, user %>