在鐵軌這種類型的代碼自動生成當PARAMS比表列多個參數
@post = Post.new(params[:article_post])
@post.save
什麼時候有情況發生的參數多於數據庫表列,會發生什麼?在數據庫表中說我們有列post_name post_id和表單我有一個複選框還有另一個輸入字段,不需要保存在數據庫表中,但需要驗證。在這種情況下,上述代碼如何工作。我想知道基礎知識。
感謝
在鐵軌這種類型的代碼自動生成當PARAMS比表列多個參數
@post = Post.new(params[:article_post])
@post.save
什麼時候有情況發生的參數多於數據庫表列,會發生什麼?在數據庫表中說我們有列post_name post_id和表單我有一個複選框還有另一個輸入字段,不需要保存在數據庫表中,但需要驗證。在這種情況下,上述代碼如何工作。我想知道基礎知識。
感謝
@post = Post.new(params[:article_post])
@post.save
這段代碼保存它們與模型的屬性相匹配,並與給定值,爲它們分配並保存在數據庫中的列,列其從形式發佈,但並未有匹配屬性數據庫不會影響代碼。
如果我想這樣做'@post = Post.new(:email =>「[email protected]」,params [:article_post])',我必須手動保存一個或兩個字段和其他字段應該用參數填充 – asdfkjasdfjk
我假設你使用Rails 3,因爲Rails 4有不同的行爲。當您發送new
,create
,attributes=
或某些其他消息並傳遞散列(並且params[:article_post]
是散列)時,rails會內部遍歷散列並在模型對象上調用#{param_name}=
方法。也就是說,
Post.new(:name => 'hello', :something_not_in_db => "Amazing!")
是相當於
post = Post.new
post.name= 'hello'
post.something_not_in_db= "Amazing!"
其實,軌道,您在哈希通過所有選項都允許與attr_accessible
設置首先檢查。但後來它並不重要,如果你的模型表有列與否,這是唯一響應事項attribute_name=
消息
如果我想要做這樣的'@post = Post.new(:email =>「[email protected]」,params [:article_post])',我必須手動保存一個或兩個字段和其他字段應該從參數中填充 – asdfkjasdfjk
通常您首先使用params'post = Post.new(params [:article_post])初始化對象',然後直接使用對象:'post.email =「foo @ bar」' 。它會有相同的效果,並且更清楚你從窗體中取出哪些參數並手動設置 – lobanovadik
@post = Post.new(params[:article_post])
@post.save
的Rails只接受與表屬性匹配的那些請求參數。
爲了您的複選框驗證,可以手動檢查,如:
if params[:check_box_attributes_name]
@post = Post.new(params[:article_post])
@post.save
end
如果我想要做這樣的事情,'@post = Post.new(:email =>「[email protected]」,params [ :article_post])'我必須手動保存一個或兩個字段,其他字段應該從params中填充 – asdfkjasdfjk
它只是將其丟棄。 –
你有答案或仍有疑問。 –