I’m getting this error when trying to use 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 %>
Running this returns this error:
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
The @support variable is created and is not nil – I can see it from the log. This was also working nicely in Rails 3.0, and now after migrating to Rails 3.2 this is somehow broken.
Here is a class of Support variable. This is used for sending email feedback to the admin:
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
Tried different things but still can’t see what is wrong here. Rails 3.2.1.
I think the problem is your
to_keymethod. Is there a reason you’re defining this method here? It’s already defined inActiveRecord::Base, so you’re overriding the internal method. If you just take it out of your model, that should fix your problem.If you do want to define
to_keyhere for some reason, remember that forpersistedmodels (e.g.ActiveRecordmodels), it should return an array with the key attributes of the model. So it should look something like this:And why are you including
ActiveModel::Validations? This is done for you inActiveRecord::Base.