私はRuby on Rails 3.0.9を使用しており、私は自分自身で「お問い合わせ」フォームを実装しようとしています。私のルーターファイル内"お問い合わせ"フォームを実装するためのActiveModelの使用上の問題
<%= form_for @contact_us, :url => contact_us_path do |f| %>
<%= f.text_field :email %>
<%= f.text_field :subject %>
<%= f.text_area :message %>
<% end %>
...私は:
require 'active_model'
class ContactUs
include ActiveModel::Conversion
include ActiveModel::Validations
attr_accessor :email, :subject, :message
def initialize(attributes = {})
@attributes = attributes
end
validates :email,
:presence => true
validates :subject,
:presence => true
validates :message,
:presence => true
def persist
@persisted = true
end
def persisted?
false
end
end
...私は私のビューファイル内:私は私のモデルファイル中のSO ...
...持っている:
match 'contact_us' => 'pages#contact_us', :via => [:get, :post]
...私は私のコントローラファイルに:
class PagesController < ApplicationController
def contact_us
case request.request_method
when 'GET'
@contact_us = ContactUs.new
when 'POST'
@contact_us = ContactUs.new(params[:contact_us])
end
end
end
上記のコードを使用すると、空白のフィールドを少なくとも含むフォームを送信すると(検証をパスしないようにする)、フォームが再読み込みされますが、これらのフィールドは自動入力されません。つまり、フォームをリロードした後(送信ボタンを押した後に行われます)、フィールド値はすべて空白の値に設定されます。
問題が何ですか? ActiveModel
の使用に間違いはありますか?
<%= form_for @contact_us, :url => contact_us_path do |f| %>
<%= f.text_field :email, :value => @contact_us.email %>
<%= f.text_field :subject, :value => @contact_us.subject %>
<%= f.text_area :message, :value => @contact_us.message %>
<% end %>
で
<%= form_for @contact_us, :url => contact_us_path do |f| %>
<%= f.text_field :email %>
<%= f.text_field :subject %>
<%= f.text_area :message %>
<% end %>
を交換する
「ActiveRecord」を拡張するのではなく、「active_model」が必要な理由はありますか?私はRailsが初めてで、まだそれを見ていない。 – Nic
@meleeここからです:https://github.com/rails/rails/blob/master/activemodel/examples/validations.rb – Backo