2012-11-20 67 views
0

在我的Rails 3應用程序我有這是一個簡單的模型關係如下:鏈接到具有自動belongs_to關係的新記錄?

動物模型

has_many :claims 

權利要求模型

belongs_to :animal 
has_many :payments 

付款模型

belongs_to :claim 

索賠表有一個名爲animal_id的列,而支付表具有一個名爲claim_id的列。

我可以成功列出索賠所有的所有付款。

我想要做的是在animal show視圖中添加一個鏈接,該鏈接創建一個新的聲明,其中animal_id已經設置,並且與新付款鏈接的索賠顯示視圖相同。

從我讀過您可以手動創建一個控制器和動作集的link_to,像這樣:

索賠顯示視圖

<%= link_to 'Create a Payment', {:controller => "payments", :action => "new", :claim_id => '@claim.id'} %> 

這似乎並不工作,但它確實鏈接到新的付款頁面。

有沒有更簡單的方法?

+0

只是瀏覽'新'的觀點不是創造記錄的方式'我猜?你在付款控制器中做什麼來處理這些變量? – scaryguy

+0

目前沒有。我讀過的所有內容都與current_user id相關。我無法弄清楚如何將claim_id傳遞給付款創建表單。 – dannymcc

+0

您可以使用':claim_id'在付款創建表單中添加隱藏輸入,並且您可以在您的payment_controller中使用該ID。 – scaryguy

回答

4

關閉我的頭頂,和未經考驗的,我覺得有以下將工作:

= link_to 'Create Payment', payments_path(:payment=>{:claim_id=>@claim.id}), :method => :post 

添加網址助手裏面的哈希只是打算把PARAMS的URL,這將是解釋軌道以同樣的方式從表單發佈的「正常」參數。

這將相當於提交新的付款表單,因此它將以相同的方式進行重定向。如果您希望通過ajax處理它,只需添加:remote => true,並確保您的PaymentsController上的創建操作正確響應javascript。


更新:再次看了你的問題,你想用claim_id新的付款形式已經設置?

好的,有很多方法可以做到這一點。如果您通過PARAMS新的動作,你可以從PARAMS採取claim_id,同樣如我上面顯示爲創建一個記錄:

= link_to 'New Payment', new_payment_path(:claim_id=>@claim.id) 

這應該將您鏈接到/支付/新?claim_id = 123控制器

然後:

def new 
    @payment = Payment.new(:claim_id => params[:claim_id]) 
end 

然而,正如在評論中指出,更好的方式來做到這一點是權利要求下窩付款:

在你的路線:

resources :claims do 
    resources :payments 
end 

在你PaymentsController:

before_filter :load_claim 

def new 
    @payment = @claim.payments.build 
end 

def create 
    @payment = @claim.payments.build(params[:payment]) 
    ... 
end 

private 
def load_claim 
    @claim = Claim.find(params[:claim_id]) 
end 

在你的鏈接:

= link_to 'New Payment', new_claim_payment_path(@claim) 

要知道,現在您的付款路徑的助手將需要在他們的權利要求,即:

= link_to 'Payment', claim_payment_path(@claim, payment) 

表單助手同樣的事情:

= form_for [@claim, @payment] ... 
+0

沒有訪問表單就創建付款,我錯過了什麼? – dannymcc

+0

更新回答,你的問題說「創建新的付款」而不是「初始化新的付款」:) – Andrew

+0

啊啊謝謝,我沒有意識到我需要在我的路線中使用嵌套資源後,對控制器進行更改。我得到'未定義的方法'payments_path''的窗體視圖,我應該改變form_for部分? – dannymcc

相關問題