Аутентификация Rails - разработка вложенных моделей - PullRequest
0 голосов
/ 21 марта 2012

Вероятно, это действительно простой вопрос, но я никогда не решал себя, будучи еще довольно новым для рельсов.

Я настроил устройство для одного локального проекта, который работает очень хорошо, однако в то время я не мог придумать, как правильно настроить аутентификацию для моих моделей, я не хотел, чтобы пользователь редактировал детали пользователя, чтобы редактировать их соответствующие детали модели одновременно, поэтому я поместил скрытую форму в форму модели, содержащую значение для current_user.id, чтобы он всегда сохранялся вошедшему в систему пользователю - однако, очевидно, я понял, что значение этой формы можно изменить на что угодно через источник, а любые данные переназначить любому пользователю.

Каков правильный способ легко настроить модели, принадлежащие пользователям, которые могут быть созданы / отредактированы / удалены и т. Д. Для этого пользователя независимо друг от друга, без необходимости сохранять детали пользователя вместе с «accepts_nested_attributes_for» способом, который я видел ранее с такие вещи?

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

Пример структуры данных:

Пользователь -> Посты и Посты -> Комментарии , где посты / комментарии можно добавлять / редактировать, удалять без необходимости изменения исходных данных пользователя, просто используется адрес электронной почты / пароль для аутентификации.

Я ценю, что структура объекта вполне может быть:

User:[{
    Posts:[{
        "name":"test",
        "description":"test"
        {
        "name":"test2",
        "description":"test2"
        }]
    }]
}]

Но в этом конкретном примере я бы хотел, чтобы посты были отдельной моделью с их собственными комментариями к каждому, и единственное отношение заключается в том, что рассматриваемый пост был создан "Joe Bloggs" или UserID 4.

Заранее спасибо, ребята, и прошу прощения за бессвязных, просто хочу убедиться, что я понимаю!

1 Ответ

0 голосов
/ 22 марта 2012

Используя devise, вы можете просто добавить строку к действию create в контроллере, которое devise распознает и фактически выполняет эти отношения для вас без необходимости создавать вложенные атрибуты или формы. Это строка'@post.user = current_user 'ниже, которая автоматически делает это! Таким образом, модели все еще являются технически вложенными, если вы захотите, но вам не нужно менять какие-либо исходные формы и т. Д., Чтобы заставить их правильно вкладываться в пользователей, просто передается идентификатор пользователя.

т.е.

def create
  @post = Post.new(params[:post])
  @post.user = current_user
  respond_to do |format|
    if @post.save
      format.html { redirect_to @post, :notice => 'Post was successfully created.' }
      format.json { render :json => @post, :status => :created, :location => @post }
    else
      format.html { render :action => "new" }
      format.json { render :json => @snippet.errors, :status => :unprocessable_entity }
    end
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...