2013-03-17 47 views
0

我想创建一个表单,用于在我的网页页脚中注册邮件列表。 我所做的是创建一个部分,在应用程序布局的页脚中呈现这个小表单。Rails 3.2创建每页页脚中使用的表单

下面是部分代码:

<%= form_for(@mailing_list) do |f| %> 
    <% if @mailing_list.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@mailing_list.errors.count, "error") %> prohibited this mailing_list from being saved:</h2> 

     <ul> 
     <% @mailing_list.errors.full_messages.each do |msg| %> 
     <li><%= msg %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <div class="field"> 
    <%= f.label :first_name %><br /> 
    <%= f.text_field :first_name %> 
    </div> 
    <div class="field"> 
    <%= f.label :last_name %><br /> 
    <%= f.text_field :last_name %> 
    </div> 
    <div class="field"> 
    <%= f.label :email %><br /> 
    <%= f.text_field :email %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

所以这从脚手架生成的代码我还在学习轨道。从我收集的信息中,我需要使用@mailing_list = MailingList.new实例化@mailing_list变量,但这里的问题是邮件列表控制器中的NEW动作没有被调用,因为我不一定访问该页面。此表单位于每个页面的页脚中。

什么是创建此表单的正确方法? 有没有办法做到这一点,而不需要在每个控制器中调用MailingList.new?

谢谢!

+2

您可能会感兴趣[细胞(HTTP://cells.rubyforge .org等/)。否则,使用'before_filter'来实例化你的'@ mailing_list',但是当你处理表单的时候会变得非常棘手(你需要重定向到某处......但是当你有错误时会发生什么?) – 2013-03-17 21:37:00

+0

谢谢m_x让我意识到细胞之类的东西:) – Zippie 2013-03-17 21:50:29

+0

感谢让我意识到细胞。至于重定向和错误,我打算在这个特定的表单中使用ajax。 – hebime 2013-03-17 22:30:20

回答

1

您的形式改变这一

<%= form_for MailingList.new, html: { remote: true } do |f| %> 

,所以你不必担心实例变量。您还应该通过remote: true,以便通过ajax提交表单。要显示错误,app/views/mailing_lists下创建一个名为create.js.erb文件,并添加以下内容(只是一个简单的脚本形式之前追加错误)

$('.error-messages').remove(); 
<% if @mailist_list.errors.any? %> 
    $('#new_mailing_list').before('<ul class="error-messages"></ul>'); 
    <%= @mailing_list.errors.full_messages.each do |msg| %> 
    $('.error-messages').append('<li><%= escape_javascript msg %></li>'); 
    <% end %> 
<% end %> 
0

您可以form_for方法改成这样:

<%= form_for :mailing_list, url: mailing_lists_path do |f| %> 

然后,你不再需要初始化@mailing_list的每一页。

需要注意的是,您无法在页脚中显示错误。您需要使用问题中的代码创建一个new.html.erb视图,如果在创建操作中保存时存在任何错误,则可以呈现该视图。

相关问题