Успокоительная аутентификация, связывающая идентификатор пользователя с профилем

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

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

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» в модель профиля ... но это не добавление профиля. Я как бы застрял, так как я относительно новичок в этом ... следует ли мне добавить что-то в модель сеанса или контроллер?

любая помощь, идеи или места для исследований были бы очень признательны ...

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


person ChrisWesAllen    schedule 21.01.2010    source источник


Ответы (2)


По умолчанию действие new - это HTTP GET, поэтому ваш request.post? блок обходится. Запрос. 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
person Eric    schedule 21.01.2010

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

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

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

@profile = current_user.profile.build

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

person Tim Sullivan    schedule 21.01.2010