Ruby on Rails: "find_create_by_user" - PullRequest
       0

Ruby on Rails: "find_create_by_user"

2 голосов
/ 07 октября 2009

Мне интересно, почему это не работает для меня:

Recipe.find_or_create_by_user_id(current_user.id, :name => "My first recipe")

Это создает прекрасный рецепт, если его не существует по идентификатору пользователя, но имя («Мой первый рецепт») не включено во вновь созданную запись. Я что-то не так делаю? Я не могу понять это.

Ответы [ 3 ]

6 голосов
/ 07 октября 2009

Попробуйте так:

Recipe.find_or_create_by_user_id(current_user.id) do |recipe|
  recipe.name = 'My first recipe'
end

Блок будет вызван, только если ему нужно создать запись.

3 голосов
/ 07 октября 2009

Вы можете попробовать это несколькими способами:

Recipe.find_or_create_by_user_id_and_name(current_user.id, "My first recipe")

Recipe.find_or_create_by_user_id(:user_id => current_user.id, :name => "My first recipe")
1 голос
/ 07 октября 2009

Есть ли вероятность, что вы используете attr_accessible или attr_protected в своей модели рецепта? Если имя недоступно, то при передаче через массовое присвоение оно не будет назначено должным образом.

Полагаю, это объясняет, почему метод Тедмана работает, а ваши первоначальные попытки - нет. Если имя не является чем-то, что вызывает у вас серьезные проблемы с безопасностью, вы можете подумать об этом через attr_accessible.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...