尝试使用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变量已创建且不为零 - 我可以从日志中看到它。这在Rails 3.0中也运行良好,现在迁移到Rails 3.2后,这种情况有所破坏。
这是一类Support变量。这用于向管理员发送电子邮件反馈:
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
尝试了不同的事情,但仍然看不出这里有什么问题。 Rails 3.2.1。
答案 0 :(得分:2)
我认为问题在于您的to_key
方法。你有没有在这里定义这种方法的原因?它已在ActiveRecord::Base
中定义,因此您将覆盖内部方法。如果你只是从模型中取出它,那应该可以解决你的问题。
如果您确实想在此处定义to_key
,请记住,对于persisted
模型(例如ActiveRecord
模型),它应该返回一个包含模型关键属性的数组。所以看起来应该是这样的:
def to_key
[self.id]
end
为什么要包括ActiveModel::Validations
?这是在ActiveRecord::Base
中为您完成的。