使用form_for时未定义的方法'to_key'错误

时间:2015-11-24 06:56:44

标签: ruby-on-rails ruby form-for

尝试在我的Rails应用程序中使用form_for时出现以下错误:

=SWITCH(Fields!Prod_Horz_Category.Value="AEC", sum(Fields!Amt_w_o_Tax.Value),
    Fields!Prod_Horz_Category.Value="ASB", sum(Fields!Amt_w_o_Tax.Value),
    ...
)

我的config / routes.rb是:

undefined method `to_key' for #<Table::ActiveRecord_Relation:0x8a09ca8>

控制器是:

root 'welcome#index'
post 'foo', as: 'foo', to: 'welcome#index'

欢迎/ index.html.erb视图是:

class WelcomeController < ApplicationController

    def index
       @tables = Table.all
    end

    def test
      @tables = Table.all
    end

end

我已尝试执行文档中建议的url解决方法,但我仍然遇到同样的错误。

有谁知道我做错了什么?我想更多地了解这个bug,以便我能更好地处理它。

2 个答案:

答案 0 :(得分:2)

根据您的代码, Ext.define('myapp.view.applications.DetailSummarySection',{ extend:'Ext.Container', xtype:'applications_detailsummarysection', config:{ emptyText:'No data found', appId:null, items:[ { itemId:'details_summary', tpl:Ext.create('Ext.XTemplate', '<tpl for="details">', //.................... '</tpl>' ) }, { xtype: 'formpanel', collapsible: true, collapsed: true, layout: 'hbox', bodyPadding: 10, title: 'Dates', items: [{ xtype: 'textfield', name: 'name', label: 'Name' }] }, { xtype:'toolbar', itemId:'popup_bar', docked:'bottom', border:'0px', height:'54px', style:{'background-color':'#1E94C0'}, defaults:{ flex:1, height:'48px', padding:'0 0 0 0', style:{ 'line-height':'10px','margin':'3px 0 0 0 ','border-radius':'0px', 'color':'#ffffff', 'background-color':'transparent', 'border':'0px'} }, items:[ { text:'Comments', itemId:'notes', cls:'pop-btn', iconCls:'action', iconAlign:'top' }, { text:'Feedback', itemId:'feedBackBtn', cls:'pop-btn', iconCls:'star', iconAlign:'top' }, { text:'CVS', itemId:'cv', cls:'pop-btn', iconCls:'compose', iconAlign:'top' }, { text:'Reject', cls:'pop-btn', itemId:'rejectBtn', iconAlign:'top', iconCls:'trash' }, { text:'Reject', cls:'pop-btn', itemId:'rejectCvSpecBtn', hidden:true, iconAlign:'top', iconCls:'trash' } ] } ] } }); 正在返回一个集合。但是,您的视图会尝试为其定义表单。这不太可能成功。

表单用于对象,而不是集合。

也许你可以做类似

的事情
index

并在def new @table = Table.new end

new.html.erb

如果你想坚持<%= form_for @table do |f| %> ... <% end %> 表格。然后你必须编辑索引操作的路由,并且在控制器中它应该用于创建新对象。

index.html.erb

希望它有所帮助!

答案 1 :(得分:0)

我看到你的代码有3个不真实的东西
然后是RESFUL标准:

  • 索引操作总是通过get动作进行,所以在路径文件中你应该再次定义: root "wellcome#index" get "foo", to: "wellcome#index", as: :foo

  • form_for通常与模型对象一起使用,但是当你使用@tables时没有收集,如果模型对象没有保存到数据库form_for中使用创建1个对象到数据库,否则form_for使用更新该对象

  • 如果您想在索引操作中创建表单,您可以关注我:
    def index @tables = Table.all @table = Table.new end
    index.html.erb文件
    <%= form_for @table do |f| %> <%= f.label :name %>
    <%= f.text_field :name %>
    <%= f.submit %> <% end %>

    你需要创建tables_controller来处理从表单发送到服务器的请求。你跑:
    rails g controller tables 在table_controller.rb中你写的相同: def create @table = Table.new table_params if @table.save redirect_to root_path, notice: "success" else redirect_to root_path, alert: "fail" end end

private def table_params params.require(:table).permit :name end 以便。结束。美好的一天!