在rails中,此类型代码自动生成
@post = Post.new(params[:article_post])
@post.save
当参数多于数据库表列时会发生什么?在数据库表中我们有列post_name post_id,在表单中我还有一个复选框以及另一个输入字段,它不需要保存在数据库表中但需要验证。在这种情况下,上述代码如何工作。我想知道基础知识。
由于
答案 0 :(得分: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
答案 1 :(得分:0)
@post = Post.new(params[:article_post])
@post.save
此代码保存与模型属性匹配的列,并为它们分配给定值并保存在数据库中。从表单发布但在数据库中没有匹配属性的列不会影响代码。
答案 2 :(得分: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!"
实际上,rails首先会检查您传入散列的所有选项是否都允许使用attr_accessible
进行设置。但是,如果您的模型表是否有列,则无关紧要,只关注响应attribute_name=
消息