我想创建这个功能 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
我是否在正确的轨道上?
答案 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