1

我想创建功能 1) 用户在表单中输入名字、姓氏 2) 表单已提交 3) 显示视图已加载,文本的某些部分被参数替换 4) 如果表单无效,即名字存在不正确,则显示错误


我已经设法为步骤 1-3 创建了功能。当一个人在表单中输入详细信息时,它会转移到不同的视图。现在,我想做的是验证表单的某些部分。

这些信息都没有保存在数据库中,但我记得我可以使用模型来验证表单。

我试图做的是创建一个模型,添加一个 attr_accessor,并对其进行验证。当表单发布时,它会在创建操作中构建一个变量,我可以做一个 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_for,而不是使用 form_tag,这就是我的模型最终的样子:

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 回答