我通过名为User
Todo
和UserTodo
之间建立了多对多关联
在todo拥有的众多用户中,有一个所有者。因此,我在名为user_todos
的{{1}}联接表中创建了一个列。
问题是,如何在创建Todo时填充此属性?
目前,我正在创建待办事项,然后在is_owner
操作中单独更新此属性。
TodoController#create
这似乎不对。在创建@todo = current_user.todos.create(todo_params)
@todo.user_todos.first.update_attribute(:is_owner, true)
时,我可以进行一次调用来填充此属性吗?
第二,有没有办法通过这种方式查询用户是否是待办事项的所有者?
todo
答案 0 :(得分:1)
我会使用UserTodo类创建一个user_todo.rb文件并执行以下操作:
ut=UserTodo.new
ut.todo = Todo.create(todo_params)
ut.user = current_user
ut.is_owner = true
ut.save
current_user.todos_as_usertodos.first.is_owner?
您可以在user.rb
上制作def todos_as_usertodos
UserTodo.where(user_id: id).to_a
end
看看我要去哪里?您希望返回并使用UserTodo对象与Todo对象,因为它们中包含更多信息。您需要的信息。额外的is_owner布尔值。当你只转移一个简单的待办事项对象时,你会失去这些信息。
答案 1 :(得分:0)
这似乎是一种糟糕的方式,因为你使用.first来获取你的实例。我会做像
这样的事情UserTodo.create(user: current_user, is_owner: true, todo: Todo.create(todo_params))
第二
我不确定这是否可能
答案 2 :(得分:0)
您可以使用此单行创建具有额外属性的连接模型:
x = 6;
y = 5;
由于current_user.user_todos.create(todo: Todo.create(todo_params), is_owner: true)
是联接模型的一个属性,您也必须通过该模型访问它:
is_owner