Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在局部视图中实例化空模型?_Ruby On Rails_Model - Fatal编程技术网

Ruby on rails 在局部视图中实例化空模型?

Ruby on rails 在局部视图中实例化空模型?,ruby-on-rails,model,Ruby On Rails,Model,为了按照模型上的定义正确地处理验证,让部分视图中的表单引用空模型的正确方法是什么。我应该在局部视图中实例化一个新的空模型并将其传递给表单吗?这就是我的工作内容 型号 class NewsletterSignup < ActiveRecord::Base def self.columns() @columns ||= []; end def self.column(name, sql_type = nil, default = nil, null = false)

为了按照模型上的定义正确地处理验证,让部分视图中的表单引用空模型的正确方法是什么。我应该在局部视图中实例化一个新的空模型并将其传递给表单吗?这就是我的工作内容

型号

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
类通讯注册/^[-a-z0-9\+\.]+\@([-a-z0-9]+\.)+[a-z0-9]{2,4}$/i
验证:zip,:format=>/^\d{5}$/
结束
局部视图

<%
    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 %>

“名字:”%>
“姓氏:”%>
“电子邮件:”%>
“Zip:%”
...

但我似乎无法实例化这样的新模型。我想我必须在视图中引用它。(注意,我是rails新手,但有十多年的专业软件开发经验,因此,如果rails的某些构造对我来说是陌生的,我很抱歉,我可能忽略了一些简单的东西!)

如果您的控制器看起来像这样

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 %>
#new.html.erb
#edit.html.erb
#_form.html.erb
...