2012-11-20 35 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

相关问题