Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 未定义的方法“许可证和x27”;至于;现在就提交&引用;:一串我哪里做错了?_Ruby On Rails 4_Error Handling_Strong Parameters - Fatal编程技术网

Ruby on rails 4 未定义的方法“许可证和x27”;至于;现在就提交&引用;:一串我哪里做错了?

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

我一直在疯狂地尝试使用其他一些StackOverflow帖子来解决这个
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?