2014-09-10 33 views
0

這是一個觀點摘錄 -導軌 - 未能從新傳遞參數的控制器創建

<%= @user.id %> is the user id 
    <%= @book.id %> is the book id 

    <div class="field"> 
    <%= f.select :contribtype, options_for_select(Contribution::CONTRIB_TYPES) %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

我還通過了用戶的參數,並從以前的觀點的書,這樣我有

http://localhost:3000/contributions/new?book_id=1&user_id=5 

作爲表單的URL。正確的user_id和book_id顯示在頁面上。

我在控制器中執行以下 -

def new 
    @user = User.find_by_id(params[:user_id]) 
    @book = Book.find_by_id(params[:book_id]) 
    @contribution = Contribution.new(params[book_id: @book.id, user_id: @user.id]) 
    end 

    def create 
    @contribution = Contribution.new(contribution_params) 
.... 

...但USER_ID和book_id未在對象被創建時,它被捕獲。我沒有收到任何錯誤,數據根本就沒有在新對象中設置。我應該通過不同的參數創建行爲嗎?

回答

1

我會使用隱藏域作爲一個快速修復:

@contribution = Contribution.new 

在HTML:

<%= f.hidden_field :user_id, value: @user.id %> 
<%= f.hidden_field :book_id, value: @book.id %> 

一定要允許在這些領域的contribution_params

+0

我不能接受再回答7分鐘,但這已經爲我解決了。我是否據此推斷,即使您已經在控制器中定義了變量,創建操作將僅使用在提交的表單中的字段中捕獲的參數? – RADan 2014-09-10 09:15:53

+0

是的,因爲你的實例變量不會在請求之間持久化,http無狀態(除非你使用cookies/session) – apneadiving 2014-09-10 09:16:55

+0

Gotcha。非常感謝您爲我清除:) – RADan 2014-09-10 09:21:38