我正在创建一个简单的准系统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]
答案 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 %>