【问题标题】:Rails 3 routing error in a relationship in a has_many => through association在has_many =>通过关联关系中的Rails 3路由错误
【发布时间】:2011-11-27 01:21:49
【问题描述】:

我的模型设置如下:

 class User
 has_many :memberships, :dependent => :destroy
 has_many :groups, :through => :memberships

 Class Group
 has_many :memberships, :dependent => :destroy
 has_many :users, :through => :memberships

 Class Membership
 attr_accessible :user_id, :group_id
 belongs_to :user
 belongs_to :group

我的 MembershipController#create

def create
  @membership = current_user.memberships.build(:group_id => params[:group_id])
  if @membership.save
    flash[:notice] = "You have joined this group."
    redirect_to :back
  else
    flash[:error] = "Unable to join."
    redirect_to :back
  end
end

我的路线中有资源 :memberships 以便它可以找到创建操作。

最后,在我的 Group#show 操作中,我希望用户能够加入一个组。所以我创建了这个 form_tag

<%= form_tag(membership_path) do %>
    <%= hidden_field_tag @group.id %>
    <%= submit_tag "Join Group"%>
<% end %>

这会返回以下错误:

Routing Error

No route matches [POST] "/memberships/1"

我已经运行了一个 rake 路线来尝试了解我在这里缺少什么:

memberships GET /memberships(.:format) {:action=>"index", :controller=>"memberships"} POST/memberships(.:format) {:action=>"create", controller=>"memberships"} new_membership GET /memberships/new(.:format) {:action=>"new",controller=>"memberships"} edit_membership GET /memberships/:id/edit(.:format){:action=>"edit", controller=>"memberships"}

membership GET /memberships/:id(.:format) {:action=>"show", :controller=>"memberships"} PUT /memberships/:id(.:format){:action=>"update", :controller=>"memberships"} 删除 /memberships/:id(.:format) {:action=>"destroy", :controller=>"memberships"}

有人看到我的方法错误吗?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 has-many-through


    【解决方案1】:

    我对此的快速浏览; &lt;%= form_tag(membership_path) do %&gt; 不应该是 &lt;%= form_tag(@membership) do %&gt;' 或 &lt;%= form_tag(membership_path(@membership)) do %&gt;

    【讨论】:

      【解决方案2】:

      您不想发布到memberships_path 而不是membership_path?看起来错误表明它找不到会员资格的 POST 路线,因为实际上没有 :membership for POST 的路线,:only 会员资格。

      【讨论】:

      • 就是这样。为清楚起见,请使用form_tag(memberships_path)
      【解决方案3】:

      路径是“new_membership”对吗? new_membership_path 如果您正在执行 form_tag。或者您始终可以使用 form_for 并通过视图中的部分呈现它。

      【讨论】:

      • 史蒂夫的回答同样不错。
      猜你喜欢
      • 2015-11-16
      • 1970-01-01
      • 2013-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多