如何创建新的连接表记录而不创建任一记录的新实例。导轨

时间:2017-06-07 17:35:01

标签: ruby-on-rails

我有三张桌子:Userfruitsuser_fruits

世界上有一定数量的用户和水果。我不能创建重复的水果。说水果已经存在于数据库中,我想使用它们,所以我没有创造新的成果。

假设我们在控制器中,我想要做的就是创建user_fruits的新实例。我还想删除destroy动作中的连接表实例,而不是实际的水果本身。这是这样做的吗?

def create
   user.user_fruits.create!(fruit: fruit)
end

def destroy
   user.user_fruits.find_by(fruit: fruit).destroy!
end


private

attr_reader :fruit

def load_fruit
@fruit = Fruit.find_by(color: red, sweetness: 100)
end

如果失败,我也希望我的destroy和create引发错误。

1 个答案:

答案 0 :(得分:0)

如果您只想创建新实例,则只需使用newbuild

def create
  @new_fruit = user.fruits.new # or fruits.build
end

<强>更新

user_fruits的新实例? 然后你应该尝试类似......

user.user_fruits.new

def create
  user.user_fruits.create!(fruit_id: @fruit.id)
end

def destroy
 user.user_fruits.find_by_fruit_id(@fruit.id).destroy!
end

如果您仍想使用阅读器,请将@fruit替换为fruit