Restful Authentication - связывание идентификатора пользователя с профилем - PullRequest
1 голос
/ 21 января 2010

Я новичок в Ruby on Rails ... Я занимался разработкой приложения типа социальной сети .... Я только что успешно добавил Restful Authentication в свое приложение ... Теперь я хотел бы создать модель/ controller, в котором каждый пользователь после входа в систему может создавать / редактировать свой собственный профиль.

Итак, я создал модель и контроллер ... код в контроллере профиля выглядит следующим образом:

def new
  @profile = Profile.new(params[:user_id])
  if request.post?
      @profile.save
      flash[:notice] = 'Profile Saved'
      redirect_to :action => 'index'
  end
end

Я пытаюсь подключить user_id [из restful auth.], Который когда-либо был в сеансе пользователя, к столбцу user_id, который я сделал в модели профиля.Я уже добавил "has_one: profile" в модель пользователя и "own_to: user" в модель профиля ... но его профиль не добавляется.Я немного застрял, так как я относительно новичок в этом ... я должен добавить что-то к модели сеанса или контроллеру?

любая помощь или идеи или места для исследований действительно будут оценены ...

Соединение новых моделей с уже существующими довольно важно, и я хотел бы разобраться с этим.

Ответы [ 2 ]

2 голосов
/ 21 января 2010

По умолчанию действие new является HTTP GET, поэтому ваш request.post? блок обходит. The request.post? в любом случае является посторонним (для базовых целей), поэтому я полностью избавился бы от этого и переместил бы остальную часть кода save в ваше действие create.

def new
  @profile = Profile.new
end

def create

  @user = User.find(params[:user_id])
  @profile = Profile.create(@user, params[:profile]) # or whatever params you use in your form
  # you can also do @profile = @user.profile.create(params[:profile]) here
  # sans @user find: @profile = current_user.profile.create(params[:profile])

  if @profile.save
    flash[:notice] = 'Profile Saved'
    redirect_to :action => 'index'
  else
    flash[:warning] = 'Could not save profile'
    redirect_to :back # or wherever
  end

end
0 голосов
/ 21 января 2010

Во-первых, если вы только начинаете, вам следует серьезно подумать об использовании Authlogic поверх Restful Authentication. Генераторов нет, и вы получите очень простой в управлении код.

Для этой конкретной проблемы: создание записи @profile.save должно быть в действии create. new - это настройка экземпляра модели для формы для ее редактирования в представлении new.html.erb.

Вы также можете иметь доступ к методу, называемому @current_user (или функции, называемой current_user). Если вы это сделаете, вы можете немного облегчить ситуацию, выполнив это:

@profile = current_user.profile.build

Метод build создаст для вас связь между пользователем и профилем.

...