Ruby on rails 当params的参数多于表列时会发生什么情况

Ruby on rails 当params的参数多于表列时会发生什么情况,ruby-on-rails,ruby,Ruby On Rails,Ruby,在rails中,此类型代码是自动生成的 @post = Post.new(params[:article_post]) @post.save 当参数多于数据库表列时会发生什么情况?比如说,在数据库表中,我们有列post_name post_id,在表单中,我有一个复选框,还有另一个输入字段,不需要保存在数据库表中,但需要验证。在本例中,上述代码是如何工作的。我想知道基本知识 谢谢 此代码保存与模型属性匹配的列,并为它们指定给定值并保存在数据库中,从表单过帐但在数据库中没有匹配属性的列不会影响代

在rails中,此类型代码是自动生成的

@post = Post.new(params[:article_post])
@post.save
当参数多于数据库表列时会发生什么情况?比如说,在数据库表中,我们有列post_name post_id,在表单中,我有一个复选框,还有另一个输入字段,不需要保存在数据库表中,但需要验证。在本例中,上述代码是如何工作的。我想知道基本知识

谢谢


此代码保存与模型属性匹配的列,并为它们指定给定值并保存在数据库中,从表单过帐但在数据库中没有匹配属性的列不会影响代码

我假设您使用Rails 3,因为Rails 4具有不同的行为。当您发送
new
create
attributes=
或其他一些消息并传递散列(并且
params[:article\u post]
是散列)时,rails会在内部迭代散列,并在模型对象上调用
{param\u name}=
方法。就是

Post.new(:name => 'hello', :something_not_in_db => "Amazing!")
相当于

post = Post.new
post.name= 'hello'
post.something_not_in_db= "Amazing!"
实际上,rails首先检查您在散列中传递的所有选项是否允许使用
attr\u accessible
设置。但是,模型表是否有列并不重要,重要的是响应
attribute\u name=
消息的是什么

@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=>“)test@email.com“,params[:article_post]),其中我必须手动保存一个或两个字段,其他字段应该从params填充。通常,您首先使用params
post=post.new初始化对象(params[:article_post])
然后直接使用对象:
post.email=”foo@bar“
。它将具有相同的效果,并且更清楚您从表单中获取哪些参数,以及手动设置哪些参数如果我想执行类似于“@post=post.new(:email=>”的操作,该怎么办?”test@email.com,参数[:article_post])'其中我必须手动保存一个或两个字段,其他字段应通过参数填充,如果我想执行类似操作,'@post=post.new(:email=>)test@email.com“,params[:article_post]),其中我必须手动保存一个或两个字段,其他字段应由params填充
if params[:check_box_attributes_name]
  @post = Post.new(params[:article_post])
  @post.save
end