2013-03-17 63 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視圖,如果在創建操作中保存時存在任何錯誤,則可以呈現該視圖。

相關問題