Ruby on rails 4 未定义的方法“许可证和x27”;至于;现在就提交&引用;:一串我哪里做错了?
我一直在疯狂地尝试使用其他一些StackOverflow帖子来解决这个Ruby on rails 4 未定义的方法“许可证和x27”;至于;现在就提交&引用;:一串我哪里做错了?,ruby-on-rails-4,error-handling,strong-parameters,Ruby On Rails 4,Error Handling,Strong Parameters,我一直在疯狂地尝试使用其他一些StackOverflow帖子来解决这个permit错误,但似乎无法克服它。我有一个项目模型和控制器&一个版本模型和控制器Projects/##/versions/new是一个表单页面,用于创建项目id的新版本。但是,当我单击submit按钮创建版本时……它在versionController中抛出以下错误: undefined method `permit' for "Submit Now! ":String Extracted source (around l
permit
错误,但似乎无法克服它。我有一个项目模型和控制器&一个版本模型和控制器Projects/##/versions/new
是一个表单页面,用于创建项目id的新版本。但是,当我单击submit按钮创建版本时……它在versionController
中抛出以下错误:
undefined method `permit' for "Submit Now! ":String
Extracted source (around line #36):
34
35
36
37
38
def version_params
params.require(:version).permit(:title)
end
end
任何和所有的帮助都将不胜感激…我已经尝试解决这个问题太久了。我的代码如下:
ROUTES.RB
resources :users
resources :sessions, only: [:new, :create, :destroy]
resources :projects, only: [:create, :new, :show, :edit, :update, :destroy]
resources :projects do
resources :versions
end
# get "static_pages/home"
# get "static_pages/help"
# get "static_pages/about"
#The original routes above map to...
root 'static_pages#home'
match '/signup', to: 'users#new', via: 'get'
match '/signin', to: 'sessions#new', via: 'get'
match '/signout', to: 'sessions#destroy', via: 'delete'
match '/help', to: 'static_pages#help', via: 'get'
match '/about', to: 'static_pages#about', via: 'get'
match '/contact', to: 'static_pages#contact', via: 'get'
项目模式:
class Project < ActiveRecord::Base
has_many :users
has_many :versions, dependent: :destroy
validates :title, presence: true, length: { maximum: 100 }
validates :background, presence: true
validates :user_id, presence: true
default_scope -> { order('created_at DESC') }
end
我能从参数中看出问题所在。你有这个:
{"utf8"=>"✓",
"authenticity_token"=>"######AAAA",
"submit"=>"Submit Now! ",
"project_id"=>"51"}
{"utf8"=>"✓",
"authenticity_token"=>"######AAAA",
"project_id"=>"51",
"version"=>{"title"=>"Foo Bar"},
"button"=>""}
你应该有这个:
{"utf8"=>"✓",
"authenticity_token"=>"######AAAA",
"submit"=>"Submit Now! ",
"project_id"=>"51"}
{"utf8"=>"✓",
"authenticity_token"=>"######AAAA",
"project_id"=>"51",
"version"=>{"title"=>"Foo Bar"},
"button"=>""}
这是一个问题的原因,因为您没有在参数中传递版本标题,并且您正在尝试使用参数创建新版本。相反,它会查找最接近的东西,在本例中恰好是字符串“Submit Now!”,但由于不允许使用“Submit”,因此强参数会将其抛出
看起来您创建的表单是正确的,这可能是引导程序的问题。你能在你的表单上发布标题输入输出的html格式吗
同时我有两个建议,
解决问题的第一件事是将f.submit更改为f.button。
f、 按钮仍将创建一个提交按钮,但它允许您以您尝试的方式命名
在控制器中,调用create后不需要保存。create将实际将其存储在数据库中,因此您将保存它两次。您应该调用new而不是create
@version = @project.versions.new(version_params)
if @version.save
检查是否有新记录
@version = @project.versions.create(version_params)
unless @version.new_record?
你就是那个男人,JKFever。我按照您的建议,将f.submit改为f.button,并将“.create”改为“.new”,这就成功了。你能再解释一下为什么f.submit会引起问题吗(但是f.button是可以的)?从你之前的回答中,我不太明白为什么这种改变有助于它的工作。谢谢你,伙计
@version = @project.versions.new(version_params)
if @version.save
@version = @project.versions.create(version_params)
unless @version.new_record?