3

尝试使用 form_for 时出现此错误:

_feedback_form.html.erb:

<%= form_for @support, :html => { :method => :post } do |f| %>
    <%= f.text_area :content, :class => "quick_feedback_form", :input_html => { :maxlength => 450 } %>
    <%= f.hidden_field :email, :value => current_user.email %>
    <div><%= f.submit "Send!", :disable_with => "Sending...", :class => "button white" %></div>
<% end %>

运行此返回此错误:

NoMethodError in Pages#guardian

Showing /home/alex/myapp/app/views/supports/_feedback_form.html.erb where line #1 raised:

undefined method `join' for nil:NilClass

@support 变量已创建并且不是 nil - 我可以从日志中看到它。这在 Rails 3.0 中也运行良好,但现在在迁移到 Rails 3.2 后,它不知何故坏了。

这是一类支持变量。这用于向管理员发送电子邮件反馈:

class Support < ActiveRecord::Base
include ActiveModel::Validations

  validates_presence_of :content 
  # to deal with form, you must have an id attribute
  attr_accessor :id, :email, :sender_name, :content

  def initialize(attributes = {})
    attributes.each do |key, value|
      self.send("#{key}=", value)
    end
    @attributes = attributes
  end

  def read_attribute_for_validation(key)
    @attributes[key]
  end

  def to_key
  end

  def save
    if self.valid?
      Feedback.support_notification(self).deliver
      return true
    end
    return false
  end
end

尝试了不同的东西,但仍然看不出这里有什么问题。导轨 3.2.1。

4

1 回答 1

2

我认为问题是你的to_key方法。你在这里定义这个方法有什么原因吗?它已在 中定义ActiveRecord::Base,因此您将覆盖内部方法。如果您只是将其从模型中取出,那应该可以解决您的问题。

如果您出于某种原因确实想在to_key这里定义,请记住对于persisted模型(例如ActiveRecord模型),它应该返回一个包含模型关键属性的数组。所以它应该看起来像这样:

def to_key
  [self.id]
end

你为什么要包括在内ActiveModel::Validations?这是为您完成的ActiveRecord::Base

于 2012-04-12T10:33:43.957 回答