Ruby on rails Ruby on Rails模型创建字符串未转换为整数
这是我的密码: release db中的base_release_id列是整数类型 form.html.hamlRuby on rails Ruby on Rails模型创建字符串未转换为整数,ruby-on-rails,model,Ruby On Rails,Model,这是我的密码: release db中的base_release_id列是整数类型 form.html.haml = form_for @release do |f| = f.label :name %br = f.text_field :name .... = f.label :base_release_id %br = f.select :base_release_id, options_from_collection_for_select(condition
= form_for @release do |f|
= f.label :name
%br
= f.text_field :name
....
= f.label :base_release_id
%br
= f.select :base_release_id, options_from_collection_for_select(conditionsPlusBlankOrderBy(Release),"id","name",@release.base_release_id)
= f.submit
发布\u controller.rb
def create
ap params
@release = Release.new(params[:release])
ap @release
...
end
我打算创建一个新版本,包括它的名称、基本版本id等。
我使用2“ap”来跟踪发布对象。奇怪的事情发生了。请参阅下面的我的日志:
{
"utf8" => "â",
"authenticity_token" => "8HdDlC3jJxYvq+8tUh/cut5ibHxjIF6L2CzAFORlNBg=",
"release" => {
"name" => "e",
"code" => "e",
"base_release_id" => "2"
},
"commit" => "Create Release",
"action" => "create",
"controller" => "releases"
}
#<Release:0x000000190f06b8> {
:id => nil,
:name => "e",
:code => "e",
:base_release_id => nil,
}
Processing by ReleasesController#create as HTML
Parameters: {"utf8"=>"â", "authenticity_token"=>"8HdDlC3jJxYvq+8tUh/cut5ibHxjIF6L2CzAFORlNBg=", "release"=>{"name"=>"e", "code"=>"e", "base_release_id"=>"2"}, "commit"=>"Create Release"}
请提前帮助并感谢您。找到原因。
在我的model release.rb中,我定义了“attr\u accessible:id,:name,:code,:as=>:tmp\u use”。然后它只接受id、名称和代码。在我添加了:base\u release\u id之后,它就可以工作了
不确定如何:as=>:tmp_使用work。我认为默认情况下所有变量都可以访问。在某些地方,我使用
Release.new(“id”=>row[:id],“name”=>row[:name],“code”=>row[:code],:as=>:tmp\u use)
有些地方我不想这样做,我希望所有列都可以访问
不知道怎么做
无论如何,谢谢你,伊万。你在使用rails 4+
params.require(:release.permit(release.fields.keys)
实际上,我的实例运行在rails 3.0.9上,但当我在控制台中键入rails-v时,它给出了4.0.2。ruby 1.9.3p484(2013-11-22修订版43786)[x86_64-linux]那么bundle exec rails-v
可能是rvm/bundler问题。尝试Release.new(params.require(:Release.fields.keys)
而不是Release.new(params[:Release])
找到原因。在我的模型Release.rb中,i'v定义了“attr\u accessible:id,:name,:code,:as=>:tmp\u use”。然后它只接受id、name和code。在我添加了:base\u release\u id之后,它就可以工作了。感谢您的帮助。
def create
ap params
@release = Release.new(params[:release])
@release.base_release_id = params[:release][:base_release_id].to_i if params[:release][:base_release_id]
ap @release
...
end