0

このチュートリアルを使用して、Rails 3.1.3 アプリケーションに連絡先フォームを追加しようとしています。ただし、最後に連絡先ページを読み込もうとすると、次のエラーが表示されます。

予期していなかったのに nil オブジェクトがあります! Array のインスタンスを期待していたかもしれません。nil の評価中にエラーが発生しました。[]

new.html.haml ページのこのコード ブロックの 1 行目で発生すると書かれています。

  = form_for @message, :url => { :action=>"new", :controller=>"contact"} do |form|
    %fieldset.fields
      .field
        = form.label :name
        = form.text_field :name
      .field
        = form.label :email
        = form.text_field :email
      .field
        = form.label :body
        = form.text_area :body
    %fieldset.actions
      = form.submit "Send"

私のコントローラーは次のようになります。

class ContactController < ApplicationController
    def new
        @message = Message.new
    end

  def create
    @message = Message.new(params[:message])

    if @message.valid?
      NotificationsMailer.new_message(@message).deliver
      redirect_to(root_path, :notice => "Message was successfully sent.")
    else
      flash.now.alert = "Please fill all fields."
      render :new
    end
  end
end

モデルは次のようになります。

class Message < ActiveRecord::Base
  include ActiveModel::Validations
  include ActiveModel::Conversion
  extend ActiveModel::Naming

  attr_accessor :name, :email, :body

  validates :name, :email, :body, :presence => true
  validates :email, :format => { :with => %r{.+@.+\..+} }, :allow_blank => true

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

  def persisted?
    false
  end

end

なぜそのエラーが発生するのですか?どうすれば修正できますか? ありがとう!

4

2 に答える 2

1

チュートリアルに記載されているようにルートを追加しますか?

match 'contact' => 'contact#new', :as => 'contact', :via => :get
match 'contact' => 'contact#create', :as => 'contact', :via => :post

その上、ur形式で次のように使用できます

<%= form_for @message, :url => contact_path do |form| %>
于 2013-01-24T04:34:45.857 に答える
0

新規アクションと編集アクションに別々のフォームを使用している場合は、new.html.haml でこれを行うことができます。

 = form_for :message, :url => { :action=>"new", :controller=>"contact"} do |form|

また

= form_for :message, @message, :url => { :action=>"new", :controller=>"contact"} do |form|
于 2013-01-24T06:07:46.563 に答える