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ではありません-ログから確認できます。これはRails3.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

さまざまなことを試しましたが、それでもここで何が悪いのかわかりません。Rails3.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 に答える