Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 通过远程表单删除关联记录_Ruby On Rails_Ruby_Model_Associations - Fatal编程技术网

Ruby on rails 通过远程表单删除关联记录

Ruby on rails 通过远程表单删除关联记录,ruby-on-rails,ruby,model,associations,Ruby On Rails,Ruby,Model,Associations,我已经构建了一个ruby on rails应用程序,允许用户跟踪他们的训练。用户有很多训练。此外,如果用户是健身房所有者,则可以创建长方体健身房。然后,用户可以通过成员资格资源与该框关联 我在/views/box/show.html.erb中为当前用户创建与远程表单的关联: <% remote_form_for Membership.new do |f| %> <%= f.hidden_field :box_id, :value => @box.id %>

我已经构建了一个ruby on rails应用程序,允许用户跟踪他们的训练。用户有很多训练。此外,如果用户是健身房所有者,则可以创建长方体健身房。然后,用户可以通过成员资格资源与该框关联

我在/views/box/show.html.erb中为当前用户创建与远程表单的关联:

<% remote_form_for Membership.new do |f| %> 
  <%= f.hidden_field :box_id, :value => @box.id %>
  <%= f.hidden_field :user_id, :value => current_user.id %>
  <%= submit_tag "I am a member of this box" , :class => '' %>
<% end %>
现在我想让当前用户能够删除他们的关联。如何构造链接/表单,以及成员身份控制器销毁操作应该是什么样子

以下是我的关联列表(如果有帮助): 使用者

锻炼

class Workout < ActiveRecord::Base
  belongs_to :user
  belongs_to :box
end
盒子

会员资格

class Membership < ActiveRecord::Base
  belongs_to :user
  belongs_to :box
end

完成建议的更改后,并假设您已使用以下代码获得当前_用户和框的成员资格

@membership = current_user.memberships.for_box(box).first
创建一个链接供用户删除成员资格,如下所示

link_to 'Delete Membership', membership_path(@membership), :method => :delete
成员资格控制器应具有如下所示的销毁方法

def destroy
  @membership = Membership.find(params[:id])
  @membership.destroy
end

这是假设您的memberships controller是restful的,并且您有map.resources:memberships在您的路线中。

您能告诉我表单上的一些细节吗?我尝试简单地更改为,但参数数目错误。不,我有一个验证,说明不能有多个成员期。你为什么这么问?
link_to 'Delete Membership', membership_path(@membership), :method => :delete
def destroy
  @membership = Membership.find(params[:id])
  @membership.destroy
end