在部分视图中使用表单引用空模型以正确处理模型上定义的验证的正确方法是什么。我应该在局部视图中实例化一个新的空模型并将其传递给表单吗?这是我正在使用的......
模型
class NewsletterSignup < ActiveRecord::Base
def self.columns()
@columns ||= [];
end
def self.column(name, sql_type = nil, default = nil, null = false)
columns << ActiveRecord::ConnectionAdapters::Column.new(name, default, sql_type, null)
end
def persisted?
false
end
column :first_name, :string
column :last_name, :string
column :email, :string
column :zip, :string
validates :first_name, :last_name, :email, :zip, :presence => true
validates :email, :format => /^[-a-z0-9_+\.]+\@([-a-z0-9]+\.)+[a-z0-9]{2,4}$/i
validates :zip, :format => /^\d{5}$/
end
部分视图
<%
signup = newsletter_signup.new
%>
<%= simple_form_for(signup, ...) do |f| %>
<%= f.input :first_name, :label => "First Name:" %>
<%= f.input :last_name, :label => "Last Name:" %>
<%= f.input :email, :label => "Email:" %>
<%= f.input :zip, :label => "Zip:" %>
...
<% end %>
但我似乎无法实例化这样的新模型。我假设我必须在视图中引用它。 (注意,我是rails的新手,但拥有十年以上的专业软件开发经验,所以如果有些rails构造对我来说似乎很陌生而且我可能只是忽略了一些简单的事情,我很抱歉!)
答案 0 :(得分:0)
如果您的控制器看起来像这样
def new
Model.new
end
def create
@model = Model.new(params[:model])
if @model.save
redirect root_path, notice: "Saved"
else
render action: 'new'
end
end
def edit
Model.find(params[:id])
end
def update
if @model.update(params[:model])
redirect root_path, notice: "Updated"
else
render action: 'edit'
end
end
您可以拥有以下观点:
# new.html.erb
<%= render 'form' %>
# edit.html.erb
<%= render 'form' %>
# _form.html.erb
<%= form_for @model do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>
...
<% end %>