我正在尝试显示发布项目的用户的名称。唯一的问题是Item.last.user
== nil
。
我已经在模型中设置了has_many
和belongs_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 :(得分:3)
这样做
@item = current_user.items.new(item_params)
这将获取当前用户的ID。 current_user指的是已登录的用户
答案 1 :(得分:0)
创建迁移时,您可以设置
t.integer "user_id", null: false
或者您可以在数据库级别定义关系:
t.belongs_to :user, index: true
确保在尝试创建项目时确实拥有用户ID。你在用表格吗?你是如何抓住用户ID的?它来自设计吗?