그래서 많은 관계가있는 계약 모델과 사용자 모델이 있습니다. 계약은 내가이가 내 양식이여러 모델에 속한 belongs_to 양식의 마지막 ID 만 업데이트
Contract.find(params[:id]).creator.email
Contract.find(params[:id]).leader.email
Contract.find(params[:id]).buyer.email
Contract.find(params[:id]).seller.email
User.find(params[:id]).contracts
을 할 수 있도록 여러 사용자에게 있지만, 다른 ID가 속한, 그래서 나는 이미 생성 된 사용자
<%= simple_form_for(@contract) do |f| %>
<% if @contract.errors.any? %>
<div id="error_explanation">
<h3><%= pluralize(@contract.errors.count, 'error') %> prohibited this contract from being saved:</h3>
<ul>
<% @contract.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="form-group">
<%= f.label :creator_id %><br>
<%= f.select(:creator_id, User.all.map { |c| [c.email, c.id] }) %>
</div>
<div class="form-group">
<%= f.label :leader_id %><br>
<%= f.select(:leader_id, User.all.map { |c| [c.email, c.id] }) %>
</div>
<div class="form-group">
<%= f.label :buyer_id %><br>
<%= f.select(:buyer_id, User.all.map { |c| [c.email, c.id] }) %>
</div>
<div class="form-group">
<%= f.label :seller_id %><br>
<%= f.select(:seller_id, User.all.map { |c| [c.email, c.id] }) %>
</div>
<% end %>
각 계약서가 올바르게 설정되었지만 계약서를 확인할 때 사용자가 판매자 인 경우 동일한 계약서 만 찾을 수 있습니다 (양식의 마지막 div)
편집 : 여기 내 두 모델이 있습니다.
class User < ApplicationRecord
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :contract, :foreign_key => 'creator_id'
has_many :contract, :foreign_key => 'leader_id'
has_many :contract, :foreign_key => 'buyer_id'
has_many :contract, :foreign_key => 'seller_id'
validates :email, presence: true, uniqueness: true
validates :role, presence: true
end
class Contract < ApplicationRecord
belongs_to :creator, :class_name => 'User', :foreign_key => 'creator_id'
belongs_to :leader, :class_name => 'User', :foreign_key => 'leader_id'
belongs_to :buyer, :class_name => 'User', :foreign_key => 'buyer_id'
belongs_to :seller, :class_name => 'User', :foreign_key => 'seller_id'
end
계약 컨트롤러 :
class ContractsController < ApplicationController
before_action :set_contract, only: [:show, :edit, :update, :destroy]
def index
@contracts = Contract.all
end
def show
@contract = Contract.find(params[:id])
end
def new
@contract = Contract.new
end
def edit
end
def create
@contract = Contract.new(contract_params)
if @contract.save
redirect_to contracts_path, notice: 'Le contract a été créé avec succès'
else
render :new
end
end
def update
if @contract.update(contract_params)
redirect_to contract_path
else
render :edit
end
end
def destroy
@contract.destroy
redirect_to contracts_path
end
private
def set_contract
@contract = Contract.find(params[:id])
end
def contract_params
params.require(:contract).permit(:creator_id,
:leader_id,
:buyer_id,
:seller_id)
end
end
내가 선택한 사용자 만 마지막 하나가 작동을 업데이트 셀렉터의 각이 필요하고 나는 그것이 작동하는 방법을 알아낼 수 없습니다.
나는이 접근법이 작동 할 수 있다고 생각하지만 나는 레일스에서 새로 왔고 아마도 잘못된 방법을 사용하고 있습니다. '복잡한 형태를 구축'에 여기 http://guides.rubyonrails.org/form_helpers.html 설명하지만 난
현장에 대한 희망을 설정할 때 나는 분명 해요 형태로 각 특정 사용자 사이의 구별을 잃은 것처럼 나는 사용자를 생성, 간단한 has_and_belongs_to_many 관계를 시도 충분 해, 고마워!
모델 정의도 삭제할 수 있습니까? –
방금 질문을 편집했습니다 – LRP
제안이 효과가 있었는지 알려주세요. has_many와 함께 복수형을 사용하지 않으면 매우 궁금합니다. –