2010-09-23 40 views
1

我有一個允許用戶查詢書籍的(rails 3)應用程序。我有三個型號:查詢,因此,本書用的has_many:通過關係是雙向的:
查詢通過結果 有許多書籍和 本書通過結果form_for和rails中的關聯

許多查詢當我輸入一個查詢,然後單擊OK,我獲取表單以使用查詢短語創建圖書。我想要books_controller#create使用查詢ID來創建一個結果book_id =書的ID和query_id =傳入查詢的ID。形式如下所示:

<%= form_for(@book) do |f| %> 

    <div class="field"> 
    <%= f.label :title %><br /> 
    <%= f.text_field :title %> 
    </div> 
    <div class='field'> 
<%= f.hidden_field :query_id, :value => @query_id%> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

上和書本上的控制器,我有:

def create 
    @book = Book.new(params[:book]) 
    query = Query.find(params[:query_id]) 
    if(@book && query) 
     result = Result.new 
     result.book = @book 
     result.query = query 
     result.save! 
     ... 
    end 
end 

在提交此表時,我得到錯誤:

ActiveRecord::UnknownAttributeError in BooksController#create 

unknown attribute: query_id 

(on line @book = Book.new(params[:book]) 

我的問題是:如何通過查詢ID傳遞到圖書創建操作,以便我可以在那裏構建結果記錄?

更新:找到了解決辦法:我用的URL的form_for在參數而不是表單字段通過如下:

<%= form_for(@book,:url => {:action => 'create',:query_id => @query.id}) do |f| %> 

有沒有更好的方式來做到這一點?

感謝 阿南德

回答

1

您應該使用hidden_field_tag,而不是作爲f.hidden_fieldquery_id不Book模型的屬性。