2014-02-26 74 views
0

在鐵軌這種類型的代碼自動生成當PARAMS比表列多個參數

@post = Post.new(params[:article_post]) 
@post.save 

什麼時候有情況發生的參數多於數據庫表列,會發生什麼?在數據庫表中說我們有列post_name post_id和表單我有一個複選框還有另一個輸入字段,不需要保存在數據庫表中,但需要驗證。在這種情況下,上述代碼如何工作。我想知道基礎知識。

感謝

+1

它只是將其丟棄。 –

+0

你有答案或仍有疑問。 –

回答

0
@post = Post.new(params[:article_post]) 
@post.save 

這段代碼保存它們與模型的屬性相匹配,並與給定值,爲它們分配並保存在數據庫中的列,列其從形式發佈,但並未有匹配屬性數據庫不會影響代碼。

+0

如果我想這樣做'@post = Post.new(:email =>「[email protected]」,params [:article_post])',我必須手動保存一個或兩個字段和其他字段應該用參數填充 – asdfkjasdfjk

0

我假設你使用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=消息

+0

如果我想要做這樣的'@post = Post.new(:email =>「[email protected]」,params [:article_post])',我必須手動保存一個或兩個字段和其他字段應該從參數中填充 – asdfkjasdfjk

+0

通常您首先使用params'post = Post.new(params [:article_post])初始化對象',然後直接使用對象:'post.email =「foo @ bar」' 。它會有相同的效果,並且更清楚你從窗體中取出哪些參數並手動設置 – lobanovadik

1
@post = Post.new(params[:article_post]) 
@post.save 

的Rails只接受與表屬性匹配的那些請求參數。

爲了您的複選框驗證,可以手動檢查,如:

if params[:check_box_attributes_name] 
    @post = Post.new(params[:article_post]) 
    @post.save 
end 
+0

如果我想要做這樣的事情,'@post = Post.new(:email =>「[email protected]」,params [ :article_post])'我必須手動保存一個或兩個字段,其他字段應該從params中填充 – asdfkjasdfjk