繁体   English   中英

nil不是form_for的符号

[英]nil is not a symbol for form_for

我正在编写一个用于编辑客户属性的简单表单(使用Rails 3.1和Ruby 1.9.3)。 控制器代码:

def edit
    cust_id = params[:cust_id]
    output_id = params[:output_id]
    @cust = CustOutput.find(:all, :conditions => {:cust_id => cust_id, :output_id => output_id })
    logger.info(@cust[0].cust_id)
end

在视图中:

<h2> Editing customer <%=@cust[0].cust_id %> with output id <%=@cust[0].output_id %></h2>
<div>
<%= form_for @cust[0] do |cust| %>
    <%= render "shared/error_messages", :target => @cust[0] %>
    <div id='id' class='outerDiv'>
        <%= cust.text_field :cust_id, :size => 20 %>
    </div>
    <div id='email1' class='outerDiv'>
        <label for='email1'>Email Part1</label>
        <%= cust.text_field :email_part1, :size => 20 %>
    </div>
    <div id='email2' class='outerDiv'>
        <label for='email2'>Email Part 2</label>
        <%= cust.text_field :email_part2, :size => 20 %>
    </div>
    <div id='dt' class='outerDiv'>
        <label for='dt'>Delivery Type</label>
        <%= cust.text_field :delivery_type, :size => 20 %>
    </div>
    <%= cust.submit "Save" %>
    <span class="cancel"><%= link_to "Cancel", :action=>"load", :cust_name=>"#{@cust[0].cust_id}" %>
<% end %>
</div>

我从打开编辑页面(http:// localhost:3000 / edit?cust_id = 2&output_id = 6)获得的错误消息:

nil is not a symbol
Extracted source (around line #3):

1: <h2> Editing customer <%=@cust[0].cust_id %> with output id <%=@cust[0].output_id %></h2>
2: <div>
3: <%= form_for @cust[0] do |cust| %>
4:     <%= render "shared/error_messages", :target => @cust[0] %>
5:     <div id='id' class='outerDiv'>
6:        <%= cust.text_field :cust_id, :size => 20 %>

第一件事是检查传入的@cust [0]是否为nil对象。 在Rails控制台中,我进行了检查(提供的cust_id和output_id)

@cust = CustOutput.find(:all, :conditions => {:cust_id => 2, :output_id => 6 })
CustOutput Load (0.7ms)  SELECT "cust_outputs".* FROM "cust_outputs" WHERE "cust_outputs"."cust_id" = 22 AND "cust_outputs"."output_id" = 6
=> [#<custOutput cust_id: 2, output_id: 6, email_part1: "abc@company.com", email_part2: nil, delivery_type: "ftp">]

同样从我放入控制器的记录器中,实际上在日志中有一个有效且正确的cust_id输出。 那么,为什么我仍然得到nil不是符号错误消息? 我也检查了CustOutput模型,并且所有attr_accessible字段都存在。

这是一个老问题,但是最近我在一个老项目中进行维护时遇到了同样的问题。 该项目使用不同的ID列,但未在模型中指定主键。

添加这些行后,所有工作:

self.primary_key = 'uuid'

项目使用Rails 3.1和MySQL 5。

如果您只想为集合中的第一个客户呈现表单,那么使用@cust.first怎么@cust.first

尝试使用:( :first而不是:all

@cust = CustOutput.find(:first, :conditions => {:cust_id => cust_id, :output_id => output_id })

并在您的form_for删除所有[0]引用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM