我正在尝试使用来自其他两个表的id来填充连接表,添加用户ID因为设计而相对容易,但是另一个Id在create方法中给了我一些问题。
UserItems表的id为user_id和item_id,它是两个表之间的链接,允许多对多关系。
这是代码
def create
@user_item = UserItem.new(user_item_params)
@user_item.user_id = current_user.id
@user_item.item = Item.find(params[:item_id])
if @user_item.save
redirect_to @user_item, notice: 'successfully created.'
else
render action: 'new'
end
end
user_item_params也是user_items_controller.rb中的一个方法
def user_item_params
params.require(:user_item).permit(:item_id, :user_id)
end
这一行
@user_item.item = Item.find(params[:item_id])
是我认为我错了的行,我不认为它用正确的项目ID填充表格。
我是通过测试驱动开发来实现的,如果给定user_item的用户或项目不存在,则当前失败的测试应该得到404。由于在未找到这些项目时会自动呈现404,因此添加这些代码行应该可以解决这个问题。但他们不是。
我在代码中设置了正确的关系,我不想用完整的控制器弄乱这个问题。
一如往常,非常感谢任何帮助,感谢您的时间。
答案 0 :(得分:0)
您没有向我们展示任何错误消息或展示了什么不起作用,但是从代码中跳出了许多突出点。
current_user.items << @item
@item
任何地方UserItem
创建新的user_item_params
,则如果您的参数正确,则无需手动分配属性真正有用的是知道你的params
哈希究竟是什么样的,以了解你实际发布的内容。
答案 1 :(得分:0)
如果您有一个名为Item的模型,并且您定义了关联
,则可以使用@user_item.item = Item.find(params[:item_id])
,否则
@user_item.item_id = Item.find(params[:item_id]).id