創建一個單一的簡單的燒錄卡的應用程序有很多,屬於關係:集成用戶ID爲創建新對象在一個ActiveRecord數據庫
card belongs_to :user user has_many :cards
由於AR公約,建立了一套驗證爲USER_ID在卡表,以反映該協會:
create_table "cards", force: :cascade do |t| t.string "word_text", null: false t.string "meaning_text", null: false t.integer "user_id", null: false end
現在,創建一個新的燒錄卡運行功能測試,運行陷入困境,因爲我不「知道如何確保新創建的對象的user_id列獲取與user.id填寫...嘗試添加這對我的形式,但似乎沒有任何工作...
```
<%= form_for @card do |f| %>
<%= f.label :word_text %>
<%= f.text_field :word_text %>
<%= f.label :meaning_text %>
<%= f.text_field :meaning_text %>
<%= f.label :user_id %>
<%= f.number_field :user_id %>
<%= f.submit "Create" %>
```
我知道這是錯誤的,因爲當我在軌控制檯輸入@card.save!
我得到這個錯誤:
ActiveRecord::RecordInvalid: Validation failed: User can't be blank
如果我登錄好了,應該自動使用用戶標識來創建新對象嗎?
非常新的鐵路,似乎無法破譯這裏發生了什麼。任何幫助將非常感激。謝謝!
你做錯了。如果你正在爲關聯用戶創建卡,那麼在'user_id'中使用'hidden_field'或者在控制器中使用'params'將'user_id'追加。 – Pavan
不要使用'hidden_field',這是最糟糕的主意,因爲它可以由最終用戶手動更改。這意味着我可以創建屬於他人的卡片。您應該在'create'操作中設置用戶的ID,並將其附加到收到的'params [:card]'。 – MrYoshiji
感謝您的回覆。 Mr.Yoshiji,我相信我曾嘗試過這一點,在我的cards_controller的專用部分中添加card_params,使其看起來像這樣: ' def card_params params.require(:card).permit(:word_text,:意思_文本,:user_id user_id) 結束,但那是不正確的?我應該在創建方法本身附加? '@card = Card.new(params [:card])' – user3763074