No route matches error: Difference between @model.association vs querying?

No route matches error: Difference between @model.association vs querying?

从技术上讲,我可以让它工作,但为什么我当前的代码不起作用让我感到困惑。我的事件 <> 用户中存在多对多关系。这是我的观点放屁的地方,说 没有路由匹配:缺少必需的键 [: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

我必须查询并且不能使用关联创建 link 到底是怎么回事?当我打印出文本时,我得到了相关数据(ID),所以它应该可以工作。下面这个我也试过了,还是不行。

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

您不需要查询 @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 %>