2014-01-29 45 views
0

我想顯示發佈項目的用戶的名稱。唯一的一點是Item.last.user == nil用戶返回零。不知道該怎麼辦

我已經在模型中設置了has_manybelongs_to關係。

以下是項目控制的params哈希表:

def item_params 
    params.require(:item).permit(:name, :quantity, :boughtfor, :soldfor, :user_id) 
end 

請注意,我:user_id是存在的。

架構的項目:

create_table "items", force: true do |t| 
    t.string "name" 
    t.integer "quantity" 
    t.integer "boughtfor" 
    t.integer "soldfor" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    t.integer "user_id" 
    end 

如何讓用戶不nil

最新通報

創建項目控制器動作:

def create 
    @item = Item.new(item_params) 

    respond_to do |format| 
     if @item.save 
     format.html { redirect_to @item, notice: 'Item was successfully created.' } 
     format.json { render action: 'show', status: :created, location: @item } 
     else 
     format.html { render action: 'new' } 
     format.json { render json: @item.errors, status: :unprocessable_entity } 
     end 
    end 
    end 
+0

有一件有用的事情是對數據庫表上的Item和約束進行驗證,以確保始終設置用戶。檢查你的Rails服務器日誌輸出。你看到關於未經許可參數的警告嗎?你確定'user_id'設置正確嗎? – fivedigit

+0

另外,你的'Item'新窗體是什麼樣的?它是嵌套形式嗎? – fivedigit

回答

3

做這樣

@item = current_user.items.new(item_params) 

這將當前用戶的ID。 current_user指的是已登錄用戶

+0

在創建操作? –

+0

是的,只有當一個currrent_user對象存在。我想只有登錄用戶才能創建項目。我對嗎? – RSB

+0

這是正確的。 –

0

當您創建遷移,你可以設置

t.integer "user_id", null: false 

,或者你可以定義在數據庫級別上的關係:

t.belongs_to :user, index: true 

確保在嘗試創建項目時確實擁有用戶標識。你在使用表格嗎?你如何抓住用戶ID?它是從設計?

+0

此代碼中包含此行 - 「add_index」項目,[「user_id」],名稱:「index_items_on_user_id」。它做同樣的事情嗎? –

+0

不,你仍然需要null:false以便數據庫不保存沒有用戶的項目。但是,您仍然需要將用戶發送給創建項目方法。告訴我們該方法 – Cremz

+0

使用創建操作更新了原始帖子。 –

相關問題