2016-08-04 2 views
1

질문 업데이트 : 구매를 편집 할 때마다 현재 사용자의 ID를 저장하려고합니다. 특히 구매가 접수 된 것으로 표시된 경우.구매를 편집 할 때 현재 사용자를 데이터베이스에 저장할 수 있습니까?

구매가 표시된 것으로 표시되어 잘 작동하는 경우 datetime을 저장하는 메소드에 대한 before_update 콜백을 통해 구입 편집기의 ID를 데이터베이스로 전달하는 방법을 알아야합니다. purchase.rb에서 user.rb

class User < ActiveRecord::Base 

    has_many :purchase_edits, :foreign_key => :purchase_editor_id 
    has_many :edited_purchases, :through => :purchase_edits 
    has_many :created_purchases, :foreign_key => :creator_id, :class_name => "Purchase" 
end 

에서

purchase_edit.rb (join 테이블)에서 purchases_controller.rb

class PurchaseEdit < ActiveRecord::Base 
    belongs_to :purchase_editor, :class_name => "User" 
    belongs_to :edited_purchase, :class_name => "Purchase" 
end 

(& 업데이트에서 생성

class Purchase < ActiveRecord::Base 
    belongs_to :vendor 
    belongs_to :creator, :class_name => "User" 
    has_many :purchase_edits, :foreign_key => :edited_purchase_id 
    has_many :editors, :through => :purchase_edits, :source => :purchase_editor 

    before_update :update_marked_received_date 

    ## Saves date when marked received. ## 
    def update_marked_received_date 
    return unless received == true 
    self.marked_received = Time.now 
    end 
end 

), 나는 이것을 가지고있다 :

+0

왜 'marked_received_by_purchases'를 사용하는 데는 이유가 있습니까? 둘째로 나는 부울 값이나 수신 타임 스탬프를 유지하는 것이 일을한다고 생각한다. –

+0

@VaibhavDhoke marked_by_received_by_id가 purchases 테이블에있는 열로 marked_by_received_purchases를 사용하고 있습니다. _purchases를 삭제할 수 있습니다. 받은 타임 스탬프가 있습니다. 사용자가받은 것으로 표시 한 ID를 저장해야하므로 부울이 작동하지 않습니다. – NeyLive

+0

아마도 우리는 서로를 오해했을 것입니다. 나는 이미받은 타임 스탬프를 가지고 있고, 참으로 부울이다. 그것은 잘 동작한다. 내가 필요한 것은 구입 한 것으로 표시된 사용자의 ID를받은 것으로 저장하는 것입니다. – NeyLive

답변

0

이있다 .rb :

class User < ActiveRecord::Base 

    has_many :created_purchases, class_name: 'Purchase', foreign_key: 'creator_id' 
    has_many :received_purchases, class_name: 'Purchase', foreign_key: 'receiver_id' 

    def self.current 
    Thread.current[:user] 
    end 
    def self.current=(user) 
    Thread.current[:user] = user 
    end 

    def purchases 
    Purchase.where("creator_id = ? OR receiver_id = ?", self.id, self.id) 
    end 
end 

마지막으로, purchase.rb에서 :

class Purchase < ActiveRecord::Base 

    belongs_to :creator, class_name: "User", foreign_key: "creator_id" 
    belongs_to :receiver, class_name: "User", foreign_key: "receiver_id" 

    before_update :update_marked_received 

    def update_marked_received 
    return unless received == true 
    if self.marked_received.blank? 
     self.marked_received = Time.now 
     self.receiver_id = User.current.id 
    end 
    end 
end 
,

이제 구매가 수신 된 것으로 표시되면 타임 스탬프와 사용자가 기록됩니다.

0
Class Purchase 
    belongs_to :created_by, class_name: 'User', foreign_key: 'created_by_id' 
    has_one :marked 
end 

Class Marked 
    belongs_to :purchase 
    belongs_to :user 
end 

이 Schema.rb

에서
def create 
    @vendor_options = Vendor.order("name ASC").all.map{ |u| [ u.name, u.id ] } 
    @purchase = Purchase.new(purchase_params) 
    @purchase.creator = current_user 
    if @purchase.save 
     redirect_to @purchase 
    else 
     render 'new' 
    end 
    end 

    def update 
    @vendor = Vendor.all 
    @vendor_options = Vendor.order("name ASC").all.map{ |u| [ u.name, u.id ] } 
    @purchase = Purchase.find(params[:id]) 
    if @purchase.update(purchase_params) 
     flash[:notice] = 'Update successful.' 
     redirect_to @purchase 
    else 
     render 'edit' 
    end 
    end 

은 당신의 호의에 일할 수 있습니다. 또한 요구 사항에 따라 관계 has_one 또는 has_many을 표시 할 수 있습니다.

유지 관리가 더 쉽고 달성하려는 접근 방식이 single responsibility principle이 아니므로 다른 모델을 만드는 것이 좋습니다. Marked 모델은 두 모델에 대해 belongs_to 관계가 있으므로 두 모델의 외래 키를 갖습니다. 봐주십시오 belongs to association.

첫째, application_controller.rb에 :

class ApplicationController < ActionController::Base 

    before_action :set_current_user 

    def set_current_user 
    User.current = current_user 
    end 
end 

을 다음 사용자에 내가 일을 그것을 가지고 어떻게

이 질문에, (내 미래의 자기)를 통해 오는 다른 사람들을위한
+0

나는 더욱 혼란 스럽다. 구매가 생성되면 구매 테이블에 하나의 foreign_key가 필요하며 구매 테이블에서받은 것으로 표시된 구매에 대해서는 별도의 foreign_key가 필요합니다. 이 점이 더 복잡한 일이 아니겠습니까? – NeyLive

+0

부분적으로 정확합니다. 당신이 지금 명확한 그림을 가지고 있다면 저에게 알려주세요. 나는 대답을 편집했습니다. 아직도 의심의 여지가 있으면 알려주세요. –

+0

좋아, 나는 협회에 속한다는 것을 이해한다. 나에게 분명하지 않은 것은 다른 모델을 도입하는 것이 상황을 어떻게 돕는가하는 것입니다. 그 모델은 무엇을 보유할까요? 추가적인 중간 관계를 창출하는 것만이 존재합니까? Marked 모델은 구매 테이블에서 두 개의 개별 사용자 키 열을 사용해야하는 문제를 어떻게 해결합니까? 기존 문제에 다른 문제를 추가하는 것 같습니다. 이것은 내가 이해하지 못하는 것입니다. – NeyLive

관련 문제