“模型的未定义方法`build'(id:integer,created_at:datetime,updated_at:datetime):Class”

时间:2013-01-10 03:26:14

标签: ruby-on-rails ruby ruby-on-rails-3

我想创建这个功能 1)用户在表格中输入名字,姓氏 2)表格已提交 3)加载了show视图,文本的某些部分被参数替换 4)如果表格无效,即第一名称存在不成立,则显示错误


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

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

我尝试做的是创建一个Model,添加一个attr_accessor和验证。当表单POST时,它会在create动作中构建一个变量,我可以做一个if / than语句。

当我尝试这个时,我收到了错误:

NoMethodError in ContentController#create

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

以下是我的内容#crera创建的内容

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

我是否在正确的轨道上?

1 个答案:

答案 0 :(得分:0)

我正在寻找解决我问题的短语是“tabless models”。

本教程将向您介绍如何执行此操作 - 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