1

機能を作成したい1)ユーザーがフォームに名前と名前を入力します2)フォームが送信されます3)ショービューが読み込まれ、テキストの特定の部分がパラメーターに置き換えられます4)フォームが無効な場合、つまり、名の存在が真ではない場合、エラーが表示されます


手順1〜3の機能を作成できました。人がフォームに詳細を入力すると、別のビューに転送されます。ここで、フォームの特定の部分を検証します。

この情報はいずれもデータベースに保存されていませんが、モデルを使用してフォームを検証できたことを覚えています。

私がやろうとしたのは、モデルを作成し、attr_accessorを追加し、それに検証を加えることです。フォームがPOSTすると、createアクション内に変数が作成され、if/thanステートメントを実行できます。

しかし、これを試したところ、エラーが発生しました。

NoMethodError in ContentController#create

undefined method `build' for Content(id: integer, created_at: datetime, updated_at: datetime):Class

私のContent#createは次のようになります

def create
    @content = Content.build(:params)
    if @content.valid?
        render 'content/show'
    else
        render 'content/new'
    end

end

これは次の形式のビューです:

<%= form_tag("/content", :method => "post", :id => "form" ) do %>

      <h4>The Doctor's Name</h2>
  <div class="row">
      <div class="span4">
      <%= label_tag(:first_name, "First Name") %>
      <%= text_field_tag :first_name, nil, placeholder: "ex: James" %>
      </div>
      <div class="span4">
      <%= label_tag(:last_name, "Last Name") %>
      <%= text_field_tag :last_name, nil, placeholder: "ex: Bond" %>
      </div>
      <div class="span4">
      <%= label_tag(:full_name, "Full Name") %>
      <%= text_field_tag :full_name, nil, placeholder: "ex: James Bond" %>
      </div>

  </div><!--form_item row-->
  <div class="form_explanation">
    <div class="alert alert-block">
        Enter's The Doctor's First Name, Last Name, And Than The Full Name. Do NOT include "Dr."
    </div>
  </div>

  <div class="pagination-centered">
  <%= submit_tag( raw("Generate The Content!"), :class => "btn btn-large btn-primary", :style => "font-weight:bold") %>
  </div>

<% end %>

これは私のモデルがどのように見えるかです:

class Content < ActiveRecord::Base

    attr_accessible :first_name, :last_name, :full_name
    attr_accessor :first_name
    attr_accessor :last_name
    attr_accessor :full_name

    validates :first_name, presence: true
    validates :last_name, presence: true
    validates :full_name, presence: true

end

私はまったく正しい方向に進んでいますか?

4

1 に答える 1

0

私の問題を解決するために探していたフレーズは「テーブルモデル」でした。

このチュートリアルでは、その方法を説明します-http://railscasts.com/episodes/219-active-model

form_tagを使用する代わりに、form_forを使用できるようになりました。これにより、私のモデルは次のようになりました。

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

    attr_accessor :first_name, :last_name, :full_name

    validates :first_name, presence: true
    validates :last_name, presence: true
    validates :full_name, presence: true

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

  def persisted?
    false
  end

end
于 2013-01-10T04:02:21.827 に答える