2010-05-25 55 views
2

所以我刚刚开始使用Rails,并尝试使用Form创建一个Object(我的情况为book_loan)。问题是我通过点击一本书来获得这个表单,所以我将book_id作为参数传递,如localhost:3000/loans/new?id = 1。如何在Rails中的窗体中设置预定义的值

现在我不希望用户能够在窗体中设置书籍ID字段,因为我已经知道该ID。所以我的问题是如何设置窗体中的值。我一直在尝试诸如:

<% form_for(@loan) do |f| %> 
    <%= f.error_messages %> 
    ... 
    <%= @loan.book_id = params[:id] %> 
    <%= f.submit 'Create' %> 
<% end %> 

没有任何成功。有人给我提示吗?

回答

4

在你的控制器的create动作,就可以得到这本书实例的保持,然后通过建立一个新的贷款该协会传递了从表单提交的值。事情是这样的:

def new 
    @loan = Loan.new 
end 

def create 
    book = Book.find(params[:id]) 
    @loan = book.loans.build(params[:loan]) 
    @loan.save # etc... 
end 

因为你正在构建通过协会的新增贷款,这将对它的正确book_id集。

+0

然后你需要在创建操作中做类似的事情。 – 2010-05-25 22:32:13

+0

瑞恩是正确的。我相应地更新了我的答案。 – 2010-05-26 17:43:35

+0

哪个控制器? – justinxreese 2011-02-20 23:59:58

2

在你的控制器动作,设置@loan.book_idparams[:id],那么,在你的模板:

<%= f.hidden_field :book_id %>

+3

用户应该使用这种安静的路由。隐藏的字段是黑客。 – 2010-05-25 22:32:34

相关问题