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