ruby-on-rails - 如何从 has_many 的双方创建记录:通过关联?
问题描述
如何从 has_many 的两侧添加记录:通过关联?
我已经成功地通过健身房页面中的表格从健身房添加和删除了一个人。
但是我不知道如何通过 Person 页面中的表单从 Person 中添加和删除 Gym。
我的模型:
class Person < ApplicationRecord
has_one :membership
has_one :gym, through: :membership
end
class Membership < ApplicationRecord
belongs_to :person
belongs_to :gym
end
class Gym < ApplicationRecord
has_many :memberships
has_many :people, through: :memberships
end
我的路线.rb:
Rails.application.routes.draw do
resources :people
resources :gyms do
resources :memberships
end
end
我的memberships_controller.rb:
class MembershipsController < ApplicationController
def new
@gym = Gym.find(params[:gym_id])
@membership = @gym.memberships.new
end
def create
@gym = Gym.find(params[:gym_id])
@membership = @gym.memberships.new(membership_params)
if @membership.save
redirect_to gym_path(@gym)
else
render :new
end
end
def destroy
@gym = Gym.find(params[:gym_id])
membership = @gym.memberships.find_by(person_id: (params[:id]))
membership.destroy
redirect_to @gym
end
private
def membership_params
params.require(:membership).permit(:person_id)
end
end
在 Gym 页面中,我有一个链接可打开此表单以选择 Person 并将其添加到 Gym(实际上在 Join表中创建了一条新记录)person_id
。gym_id
membership
我的memberships/_form.html.erb
:
<%= form_with(model: [@gym, membership], local: true) do |form| %>
<div class = "form-group">
<%= form.label :Person, class: "form-text" %>
<%= form.collection_select(:person_id, Person.all, :id, :firstname, {include_blank: true}, class: "form-control") %>
</div>
<div class="actions">
<%= form.submit 'Submit Membership', class: "btn btn-primary" %>
</div>
<% end %>
在我的路线文件中,如果我将成员资格资源嵌套在人员资源下并遵循相同的过程,最终我将点击memberships#new
健身房资源已经使用的操作。
我被困住了,无法解决这个问题。
解决方案
推荐阅读
- apache-flink - 在 Flink 流式传输期间删除插槽时是否可以恢复
- adapter - viewholder onclickListener 空对象引用
- android - 如何从通知中发送回复?
- excel - 你能有一个公式从计算中删除零值吗?
- wpf - 为 wpf 弹出对话框应用 Visual Studio 主题(浅色/深色)
- c# - 使用 EF 将内容搜索到两列
- java - 在画布上绘图并在绘图后调整画布大小
- arrays - 如何将数组中的字符连接成字符串?
- python - 提供输入标签的单热编码标签
- javascript - 将javascript数组分配给具有属性名称的JSON对象列表?