2013-09-21 2 views
2

Каков правильный способ иметь форму в частичном представлении ссылки на пустую модель для правильной проверки правильности, как определено в модели. Должен ли я создать новую, пустую модель в частичном представлении и передать ее форме? Вот то, что я работаю с ...Создать пустую модель с частичным видом?

МОДЕЛЬ

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

Но я не могу показаться, чтобы создать экземпляр новой модели, как это. Я предполагаю, что я должен ссылаться на это в представлении. (Заметьте, я новичок в рельсах, но имею десятилетний опыт профессионального развития программного обеспечения, поэтому приношу свои извинения, если некоторые из конструкций рельсов кажутся мне чуждыми, и я могу просто просто пропустить что-то простое!)

ответ

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 %> 
Смежные вопросы