【发布时间】:2015-08-15 20:27:07
【问题描述】:
我正在 Rails 4 中开发一个简单的项目管理工具,让我头疼的部分主要有三个模型:Projects、Users 和 Memberships。
用户可以有很多项目,项目也可以有很多用户。我通过以下方式在项目和用户之间实现了has_many through 成员关系:
项目:
class Project < ActiveRecord::Base
has_many :memberships
has_many :users, through: :memberships
end
用户:
class User < ActiveRecord::Base
has_many :memberships
has_many :projects, through: :memberships
end
会员:
class Membership < ActiveRecord::Base
belongs_to :user
belongs_to :project
end
到目前为止,我还没有在 Stack Overflow 上看到它,但我为 Memberships 创建了一个单独的控制器,只有 :create 和 :destroy。
到目前为止,:create 似乎工作得很好。
主要问题在于会员资格的销毁功能。 我实现的destroy函数是:
def destroy
Membership.find(:id).destroy
redirect_to current_project || request.referer
end
rake routes 说会员路径存在,但以下尝试给了我:
我尝试使用link_to helper 删除会员资格:
<%= link_to "delete", membership, method: :delete %>
EDIT: error: undefined local variable or method `membership'
<%= link_to "delete", @membership, method: :delete %>
EDIT: error: Sorry something went wrong --> goes to /memberships
<%= link_to "delete, membership_path(@membership), method: :delete %>
EDIT: error No route matches {:action=>"destroy", :controller=>"memberships", :id=>nil} missing required keys: [:id]
这都给出了错误。
编辑:还应要求提供projects_controller #show 功能
def show
@user = current_user
@project = current_user.projects.find(params[:id])
@members = @project.users
@projects = @user.projects
@membership = @project.memberships.build if logged_in?
@memberships = @project.memberships
end
如何确保删除具有@project.membership_ids 中关联 ID 的成员资格?我应该包含某些额外的参数吗?
【问题讨论】:
-
他们给出什么样的错误?错误是在生成链接时发生还是在单击时发生?
-
您能否发布控制器操作的代码,该操作显示“删除”链接到会员资格?我认为问题在于呈现该视图,而不是
MembershipController类上的destroy方法。 -
我添加了 Project#show 函数。到目前为止,当我单击链接时会引发错误,具体取决于会员路径的代码。
标签: ruby-on-rails ruby