Ruby on rails 如何在Rails中使用多对多?

Ruby on rails 如何在Rails中使用多对多?,ruby-on-rails,many-to-many,Ruby On Rails,Many To Many,在我的项目中,我有用户和任务。一个用户可以加入多个任务,一个任务可以有多个用户。 所以我创建了一个名为questing的表,其中包含用户id和quest id。 在my user.rb中,我做了以下工作: require 'digest/sha1' class User < ActiveRecord::Base has_many :questings has_many :quests ,:through =>:questings ... 在我的show.html.erb

在我的项目中,我有用户和任务。一个用户可以加入多个任务,一个任务可以有多个用户。 所以我创建了一个名为questing的表,其中包含用户id和quest id。 在my user.rb中,我做了以下工作:

require 'digest/sha1'
class User < ActiveRecord::Base
  has_many :questings
  has_many :quests ,:through =>:questings
  ...
在我的show.html.erb中,我做到了:

<%= link_to 'join this quest!!!', :action => :join_quest %>
:加入任务%>
现在,单击此链接将导致如下错误:
找不到ID=join\u Quest的任务
,url指向/quests/join\u Quest,而不是/quests/1/join\u Quest

现在我的问题是:

我的任务控制器是加入任务操作的正确位置,还是应该将其移动到我的用户控制器

为什么会出现这个错误?如何解决

为了挽救这段关系,我必须在我的加入任务中写些什么

在my/users/show.html.erb上,我想输出用户加入的所有任务。如何做到这一点?我必须从我的关系表中获取所有这些任务,对吗?怎么做

我希望你能帮助我!谢谢

编辑: 当将
:member=>{:join\u quest=>:get}
添加到my routes.rb(
map.resources:quests,:member=>{:join\u quest=>:get}
)时,它将调用/quests/1/join\u quest并以正确的方式调用我的操作。
但是我仍然不知道在保存连接的操作中应该写些什么。

我假设您在任务控制器中时知道当前用户。如果是这样,那么你所需要做的就是这样

@quest.users << current_user

@quest.users要保存关系,您需要

# quests controller
@quest.questings.create(:user_id => current_user)
但我假设您可以获得当前用户的

希望对你有帮助

编辑

回答您的问题:

我的任务控制器对吗 我加入任务行动的地点,或 我应该把它移到我的房间吗 用户和控制器

您可以在
用户
任务控制器
中执行此操作,只要它对您更有效

我必须在我的简历上写些什么 加入任务行动以保存 关系

上面回答

在my/users/show.html.erb上,我想 输出用户加入的所有任务。怎么 这样做?我得把这些都弄到手 我的关系表中的任务, 正确的?怎么做

#用户控制器,显示方法
@user=user.find(参数[:id],:include=>:任务)
#显示视图
#从任务中打印你想要的任何内容

除了routes.rb中的映射之外,所有这些都非常有效。在Rails 3中,这需要阅读如下内容:参考资料:任务确实获得:加入任务,:on=>:成员结束感谢您将这篇文章放在一起-非常有用,甚至一年多以后:)
<%= link_to 'join this quest!!!', :action => :join_quest %>
@quest.users << current_user
# quests controller
@quest.questings.create(:user_id => current_user)
# users controller, show method
@user = User.find(params[:id], :include => :quests)

# show view
<% @user.quests.each do |quest| %>
   # print whatever you want from the quest
   <%= quest.any_attribute %>
<% end %>