2015-11-06 64 views
0

我有一個數組,看起來像這樣:保存在一個數組項活動記錄

[{"id"=>"2", "reply"=>"ok"}, {"id"=>"3", "reply"=>"ok"}, {"id"=>"4", "reply"=>"ok"}, {"id"=>"5"}, {"id"=>"6", "reply"=>"2"}] 

現在我想將它保存這樣的:

current_user.answers.transaction do 

    success = params[:answers].map(&:save) 
    unless sucess.all? 
    errored = params[:answers].select { |b| !b.errors.blank? } 
    raise ActiveRecord::Rollback 
    end 

end 

但結果

undefined method `save' for {"id"=>"2", "reply"=>"ok"}:ActionController::Parameters 

確實有人知道我可以保存每件物品嗎?

class Answer < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :question 
    has_many :comments 

    validates :reply, :question_id, :week_number, presence: true 


end 
+1

要認識到,'PARAMS '是一個哈希,而不是一個ActiveRecord,所以#save不存在作爲一種方法。你仍然可以使用'map',但必須爲它編寫一個塊。 – rdnewman

+0

有任何建議,我正試圖實現,但無法這樣做。 –

+0

顯示你的'Answer'模型 – AbM

回答

0

啊,就它發送一個塊...所以你可以嘗試:

current_user.answers.transaction do 
    success = params[:answers].map do |hash| 
    object = Model.new(hash) 
    object.save 
    end 
    unless success.all? 
    errored = params[:answers].select { |b| !b.errors.blank? } 
    raise ActiveRecord::Rollback 
    end 
end 

要知道,Model需要在模型的你試圖用實例化對象的名稱。

但是,這只是如果你正在做新的對象,一般不會是你的情況下所設置的id屬性已經

current_user.answers.transaction do 
    success = params[:answers].map do |hash| 
    object = Model.find(hash["id"]) 
    object.update_attributes(hash) 
    end 
    unless success.all? 
    errored = params[:answers].select { |b| !b.errors.blank? } 
    raise ActiveRecord::Rollback 
    end 
end 

希望這有助於