2017-02-10 52 views
1

所以我有一個用戶模型,並與許多合同模型一對多的關係。合同屬於多個用戶,但用不同的ID,所以我能做到這一點多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 %>

我的合同是與每個用戶ID設置正確創建,但是當我檢查用戶的合同,我只能找到相同的合同,如果用戶是賣方(這樣的形式的最後一個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 

我需要每個選擇更新選擇的用戶,但只有最後一個是工作的,我無法弄清楚如何使它發揮作用。

我覺得這種方法可以工作,但我在新的軌道,也許我用錯了方法。 我想一個簡單的has_and_belongs_to_many關係,製造出用戶喜歡在這裏解釋下http://guides.rubyonrails.org/form_helpers.html「建立複雜的形式」,但我的形式失去了每個特定用戶之間的區別,當我與現場的

希望將它們設置我清楚夠了,謝謝!

+1

您是否也可以刪除模型定義? –

+0

剛剛編輯問題 – LRP

+0

讓我知道如果我的建議工作,我很好奇,如果不使用has_many複數做到這一點。 –

回答

0

好了,你有一對夫婦與您的模型定義的問題。

  1. 你的關係需要,如果你正在使用has_many是複數,因此這將是has_many :contracts。這很可能是導致你的問題的原因。
  2. 這不是有多個外鍵同桌最好的主意。取而代之的是一個has_many :contracts, foreign_key: 'contractor_id'。但是,然後使用單獨的變量來定義User的角色。並在Contract你將有belongs_to :user, :foreign_key => 'contractor_id'。然後,您可以指定自定義accessor_methods,如果您想調用creator,leader等。
+0

合同在我的代碼中是複數形式,在這裏用簡單的術語重寫時會造成拼寫錯誤。我明白你提出的角色和accessor_methods變量,但我需要保持合同和用戶之間的多對多關係。我的合同總是有4個用戶相關 – LRP

+0

不知道我的觀點應該如何工作,如果我再也沒有ID。你能給我更詳細的關於我應該如何實現這一切的片段嗎? – LRP

+0

好的,爲了讓我爲您的案例編寫完整的解決方案,我需要您添加控制器和整個視圖以獲得更好的圖像。再次考慮這一點,我認爲你需要has_and_belongs_to_many,所以我認爲你沒有找到一種區分用戶的方法,這是你讓它無法工作的一步。 –

相關問題