Ruby 有什么错误吗?导致ActionView::Template::Error-未定义的方法
我是ruby和rails的新手。现在对下面的问题有点困惑 我有一个表单,用户可以通过表单添加/编辑条目。表单包含输入字段、标签、复选框和组合框(选择) 如果用户想要编辑对象,则正确加载存储的数据,但如果应添加复选框的数据,例如,是否选择了项,则我会收到以下错误: ActionView::Template::Error(未定义的方法Ruby 有什么错误吗?导致ActionView::Template::Error-未定义的方法,ruby,erb,Ruby,Erb,我是ruby和rails的新手。现在对下面的问题有点困惑 我有一个表单,用户可以通过表单添加/编辑条目。表单包含输入字段、标签、复选框和组合框(选择) 如果用户想要编辑对象,则正确加载存储的数据,但如果应添加复选框的数据,例如,是否选择了项,则我会收到以下错误: ActionView::Template::Error(未定义的方法submit'for#)): 11: 12: 13: 14: 15: 16: 17:'书籍'> /usr/lib/ruby/vendor\u ruby/active\u
submit'for#)):
11:
12:
13:
14:
15:
16:
17:'书籍'>
/usr/lib/ruby/vendor\u ruby/active\u model/attribute\u methods.rb:407:in
method\u missing'/usr/lib/ruby/vendor\u ruby/active\u record/attribute\u methods.rb:149:in'method\u missing' 下面是我的表单输入html.erb的一个小例子,但它也会导致相同的错误
<%= form_for :book, :url => { :action => action }, :method => method do |f| %>
<%= field_set_tag(l(:fieldset_book_info)) do%>
<%= f.hidden_field :id , :value => @book.id %>
<p><%= label(:create_ticket, "checked", l(:label_create_ticket)) %><%= check_box :create_ticket, "checked", :checked => "checked", :disabled => Setting.plugin_books['create_ticket'], :checked_value => true, :unchecked_value => false %></p>
<p><%= f.label :title %><br /><%= f.text_field :title %></p>
<p><%= f.label :isbn10 %><br /><%= f.text_field :isbn10 %></p>
<p><%= f.label :isbn13 %><br /><%= f.text_field :isbn13%></p>
<%end%>
<%= debug @book.source_formats.any? { |f| f.id == 4 } %>
<p><%= f.submit msg %></p>
<% end %>
{:action=>action},:method=>methoddo | f |%>
@book.id%>
“选中”,“禁用=>设置.插件\u书籍['create\u ticket'],:选中的\u值=>true,:未选中的\u值=>false%>
我开发并测试了两个系统。我的测试系统包括以下版本:
Ruby版本1.9.3(i686 linux)Rails版本3.2.13 生产系统: Ruby版本1.8.7-p358(2012-02-08)[x86_64-linux]
Rails版本3.2.13 我已经阅读了可枚举v1.8.7和v1.9.3的ruby文档,但没有发现错误。如果我删除
f.submit(第14行)
它会工作
我知道错误是由book.source\u formats.any引起的?{| f | f.id==4}
它只出现在v1.8.7中。有什么想法吗?这行
<%= debug @book.source_formats.any? { |f| f.id == 4 } %>
这回答了为什么的问题:
1.9中引入了块的可变范围
{:action=>action},:method=>methoddo | f |%>
这里f是表单块的引用变量,它在下面的行中被重写
<%= debug @book.source_formats.any? { |f| f.id == 4 } %>
将book source的本地块变量更改为类似于say bs的值
<%= debug @book.source_formats.any? { |bs| bs.id == 4 } %>
这将解决问题。Forker为您提供了一个关于ruby 1.9.x版本块中变量作用域的好链接。ruby 1.9+版本块中的变量作用域在这里已经讨论过@,同名变量f reference导致了这个问题。更改book source格式的变量名,如下所示
book.source\u formats.any?{| sf | sf.id==4}
您在
之前有
显示您的\u表单输入的完整列表,html.erb
太多了。那是一个愚蠢的初学者错误!
<%= debug @book.source_formats.any? { |f| f.id == 4 } %>
<%= debug @book.source_formats.any? { |bs| bs.id == 4 } %>