2

我有一個單獨的文本區域輸入,我希望在我的控制器上獲得一個blob我的new方法,但希望在保存之前解析輸入,否則會輸入混亂。如何在保存前在Rails 3中手動設置嵌套的模型值?

我知道我可以說像

@post.user_id = current_user.id 

,其中該屬性不直接從一種形式來任意設定一個模型的屬性。我的問題雖然在於我想設置一個嵌套模型的值。

比方說,該協會是post has_many commentscomment belongs_to post

是否post.comments一下就設置爲一個哈希看起來像評論?像

@post.comment = {'comment' => 'foo'} 

或類似的東西?

感謝您的任何指導。

回答

1

如果你嵌套形式維權,你可以通過從你的PARAMS註釋值:

@post.comment.update_attributes(params[:comment]) 

如果(你應該在你的#NEW雖然有人稱@ post.build_comment)你希望將它們在你的控制器,那麼你需要一個散列「容器」的評論,像這樣:

{'comment' => {:message => 'foo', :author => current_user}} 

或類似的東西

2

通常我會說最好乾這種事情,只需在before_save回調中處理評論模型本身的解析。

class Comment < ActiveRecord::Base 
    before_save :parse_comment 

    protected 
    def parse_comment 
    self.comment = ... 
    end 
end 

但是,如果回調不適合你,@ corroded的建議應該工作。