2011-03-11 45 views
0

我是新手,因此請耐心等待。我願意提供有關如何以不同方式做到這一點的建議。Groupon Alert Rails

我想在rails中的一個佈局中呈現2個單獨的控制器操作。

我有2個控制器:優惠券和MainAlert。在我的應用程序寬版面頁面的主體中,我有一個<yield >,它根據請求(e.i. localhost/coupons或localhost/MainAlerts)加載優惠券或MainAlerts的索引操作。

但是,我想加載優惠券或MainAlert或其他控制器(取決於請求)的索引動作,但總是加載_form(其中用戶創建新的警報)在我將隱藏和顯示的最頂部。

在groupon.com

從佈局MainAlerts「獲得通過電子郵件(+)交易」選項如何裝入從優惠券兩個控制器動作(指數和_form(新?創造?),該值該MainAlert形式需要被保存到數據庫,如果用戶點擊提交。

我願意就如何做到這一點不同的意見。

謝謝你的時間每一個人。=)

回答

1

我也是一個新手,所以期待更多漂亮的答案。

但解決此問題的一種方法是在應用程序控制器中使用before_filter,以便在每個操作都被服務時始終設置一個新的MainCoupon實例變量。之後,您可以使用渲染'maincoupon/form'來渲染布局中的表單。該表單應該按預期工作,因爲需要實例變量是由before_filter設置的。

它可能是這個樣子:

# application_controller.rb 
class ApplicationController < ActionController::Base 
    # other stuff 
    before_filter :new_coupon 


    # other stuff 


    def new_coupon 
    @maincoupon = MainCoupon.new 
    end 
end 

在佈局,你可以有

<% = render 'maincoupons/form' %> 

或者更好的是,使用HAML,只是:

= render 'maincoupons/form' 

一般來說你新行爲與用戶將信息輸入表單的視圖相關聯。控制器中的新操作會創建一個新的對象@maincoupon = MainCoupon.new,這個對象將用作構建表單的「腳手架」。

當用戶提交時,表單信息將作爲參數發送到創建操作,該操作會從表單發送信息並使用它創建所需類型的新對象。 @maincoupon = MainCoupon.new(params[:maincoupon])

之後它使用@maincoupon.save方法將它保存到數據庫中。 您可以在控制檯(導軌控制檯)中自行嘗試相應的模型方法。 例如:

> A = User.new 

將創建一個新用戶,但不會將其保存到數據庫。 您可以繼續這樣:

> A.name = "Apa" 
> A.save 

這將創建並保存它馬上。

> User.create(:name => "Apa") 
+0

謝謝你的迴應Jesper。 嘗試顯示時出現以下錯誤。這個錯誤在我的嘗試中一直存在。 ' app/views/simplealerts/_form.html.erb其中第1行產生: 未定義方法'model_name'爲NilClass:類 <%= form_for(@simplealert)do | f | %>' – Yuri 2011-03-12 11:29:58

+0

順便提一下,我已經跟蹤了您對HAML提示的建議。我仍然試圖展示它。 – Yuri 2011-03-12 11:36:02

+0

對不起,我對過濾器錯了。它應該是一個前置過濾器,而不是後置過濾器。 – Jesper 2011-03-12 22:45:36