2

私はこれらの2つのアクションでコントローラーを家に持っています:

  resources :home do
    collection do
      get 'index'
      get 'contact'      
    end
  end

そしてモデル:

class Home
  include ActiveModel::Validations  
  include ActiveModel::Conversion  
  extend ActiveModel::Naming

  attr_accessor :name, :message

  validates :name, :presence => {:message => 'Name cannot be blank.'}, :allow_blank => true, :length => {:minimum => 2, :maximum => 40}
  validates :message, :presence => {:message => 'Message cannot be blank.'}, :allow_blank => true, :length => {:minimum => 10}

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

    def persisted?  
      false  
    end
end

コントローラー:

class HomeController < ApplicationController
  def index
  end

  def contact
    @home = Home.new
  end
end

そしてフォーム(/views/home/contact.html.erb

  <%= form_for(@home, :validate => true) do |f| %>
    <% if @home.errors.any? %>
      <div id="error_explanation">
        <h2><%= pluralize(@home.errors.count, "error") %> prohibited this role from being saved:</h2>
          <ul>
        <% @home.errors.full_messages.each do |msg| %>
          <li><%= msg %></li>
        <% end %>
        </ul>
      </div>
    <% end %>

    <div class="field">
      <%= f.label :name %><br />
      <%= f.text_field :name %>
    </div>
    <div class="field">
      <%= f.label :message %><br />
      <%= f.text_field :message %>
    </div>
    <div class="actions">
      <%= f.submit %>
    </div>
<% end %>

モデルにDBテーブルがある場合のようにフォームを検証したいのですが、残念ながら、DBテーブルのないモデルがあり、フォームを検証する必要があるという経験はありません...私はまだエラーが発生する

undefined method `to_key' for nil:NilClass

誰かが私を助けてくれますか、それを機能させる方法を教えてください。

ありがとうございました

4

1 に答える 1

1

このrailscasthttp : //railscasts.com/episodes/219-active-model?language=en&view=asciicastを視聴/読むことをお勧めします。これも例外を説明しています

また、作成アクションが表示されません。作成アクションが失敗してフォームを再度レンダリングするときに変数を設定しましたか?

于 2012-06-07T13:57:47.063 に答える