强参数和POSTing:'字符串的未定义方法许可'

时间:2015-02-13 10:09:02

标签: ruby-on-rails

我正在创建一个简单的准系统CRUD应用程序,它列出了一个电影集,并允许您编辑现有条目或添加新条目。

movie#new会显示一个包含四个字段的表单:

  • text_field_tag(:title)
  • text_field_tag(:genre)
  • number_field_tag(:rating, min: 0, max: 10, step: 1)
  • check_box_tag(:bluray)

表单提交movie#create,内容如下:

Movie.create(params.require(:title).permit(:genre, :rating, :bluray))
redirect_to(index)

这是问题所在!提交表单给我发错误未定义方法'允许'为'Vertigo':字符串

在错误页面上,我可以看到参数是以您希望的方式发布为哈希:

{"utf8"=>"✓",
 "authenticity_token"=>"x55ibBjNoYCAfSNi3hNREvyIkMTMn7DTrI3YGqzCk0Hefvjx41vlYKDlNLSTsnNlH7cXTkXM1IUReJbKrCjI6g==",
 "title"=>"Vertigo",
 "genre"=>"Mystery",
 "rating"=>"9",
 "bluray"=>"0",
 "commit"=>"Submit"}

即使在谷歌搜索问题之后,这个也让我很难过。显然,有些人的问题是,而不是params哈希,他们得到一个大的params字符串,但这似乎没有发生在这里 - 在错误页面中有用地包含的小REPL中,我可以键入{{1}然后回到“眩晕”。

我在Windows 8.1上使用Rails 4.2.0和Ruby 2.0.0-x64(请不要伤害我),使用WEBrick服务。

我的表单是

params[:title]

2 个答案:

答案 0 :(得分:1)

首先,重建您的表单,以便使用form_for

<%= form_for @movie do |f| %>
  <%= f.text_field :title %>
  <%= f.text_field :genre %>
  <%= f.number_field :rating, min: 0, max: 10, step: 1
  <%= f.check_box :bluray %>
  <%= f.submit "Submit" %>
<% end %>

然后,在你的控制器中:

Movie.create(params.require(:movie).permit(:title, :genre, :rating, :bluray))))

答案 1 :(得分:1)

问题是您使用的是form_tag而不是form_for,这可以解决您的问题

在电影控制器中

def new
  @movie = Movie.new
end

def create
  @movie = Movie.new(movie_params)
  @movie.save
end

def movie_params
  params.require(:movie).permit(:title, :genre, :rating, :bluray)
end

您的表单应使用form_for

<%= form_for @movie do |f| %>
  <%= f.text_field :title %>
  <%= f.text_field :genre %>
  <%= f.number_field :rating, min: 0, max: 10, step: 1 %>
  <%= f.check_box :bluray %>
  <%= f.submit "Submit" %>
<% end %>