Создайте контроллер и просмотрите

Здравствуйте, у меня есть следующие модели.

Модель пользователя:

class User < ActiveRecord::Base
  attr_accessible :email, :password, :password_confirmation
  has_one :user_informations
  has_secure_password
end

Модель информации о пользователе:

class UserInformation < ActiveRecord::Base
  belongs_to :user
  attr_accessible :address, :address2, :business, :descripcion, :identification_number, :mobile_cell, :name, :phone_number
end

Теперь мне нужно создать представление и контроллер для создания и обновления информации о пользователе, и у меня много вопросов:

1) как я могу сгенерировать контроллер:

рельсы g контроллер UserInformations

o

рельсы g контроллер Информация о пользователе

2) как мои новые действия, создание и обновление знают идентификатор пользователя.

3) как я могу установить маршруты для этой информации о пользователе

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

Еще раз спасибо за помощь.


person Jean    schedule 04.11.2012    source источник


Ответы (3)


1) Вы должны использовать множественное число для контроллера, поэтому rails g controller UserInformations будет работать.

2 + 3) Вы можете настроить Restful маршруты:

resources :users do
  member do
    get 'user_information'
  end
end

С указанными выше маршрутами у вас будет путь users/:id/user_information, поэтому вы можете узнать свой идентификатор пользователя через params[:id], например, в своем действии создания или обновления, которое вы можете использовать:

user = User.find(params[:id])

чтобы узнать, какому пользователю показывается информация.

person Thanh    schedule 04.11.2012

Вам понадобится столбец user_id в вашей таблице user_information и модели.

1) рельсы g UserController

2) вы можете включить user_id в качестве параметра, поэтому для нового действия это будет

def new
  @user = User.find(param[:user_id])
  @user_information = @user.user_information.new
end

действия создания и обновления получат идентификатор пользователя из параметров формы, но вам нужно будет подумать о том, кто будет использовать эти действия, и хотите ли вы разрешить всем пользователям обновлять информацию о других пользователях. Если нет, вы должны иметь идентификатор пользователя в качестве скрытого параметра и использовать драгоценный камень, такой как канкан (https://github.com/ryanb/cancan), чтобы ограничить доступ.

в качестве альтернативы вы можете настроить их как вложенные ресурсы (http://railscasts.com/episodes/139-nested-resources)

3) для простых ресурсов вы можете добавить это в свой файл route.rb

resource :user_information

или для вложенных вы можете сделать

resource :users do
  member do
    resource :user_information
  end
end
person joshblour    schedule 04.11.2012

Прежде всего

в пользовательской модели должно быть

  has_one :user_information

так как имя ассоциации должно быть в единственном числе с has_one.

вы можете создать контроллер, дав команду

rails g controller UserInformation

и это зависит от вас, какое имя вы хотите дать своему контроллеру.

В новом действии вам нужно будет найти пользователя по его id. Вы можете сохранить идентификатор пользователя в сеансе после входа в систему. Или, если вы впервые сохраняете пользователя, вам нужно будет передать идентификатор пользователя.

В новом действии сделать

user = User.find(session[:id])
user.user_information.create(params[:user_information])

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

person Akshay Vishnoi    schedule 04.11.2012
comment
Спасибо, Акшай Вишной, но у меня есть вопрос о контроллере, в соглашении о контроллерах рельсов сказано, что контроллеры множественны, поэтому я не знаю, что контроллеры должны быть пользовательской информацией контроллера рельсов g или рельсы генерируют пользовательскую информацию контроллера. Спасибо - person Jean; 04.11.2012
comment
на самом деле вы должны использовать имена контроллеров во множественном числе. Помогает в маршрутах. Что касается действия индекса, мы можем использовать непосредственно user_information_path. Так что в вашем случае используйте rails g controller user_informations - person Akshay Vishnoi; 04.11.2012
comment
также, если вы укажете имя действия в команде генерации, рельсы автоматически сгенерируют для вас методы действия и представления. например rails g controller user_informations index, new, edit - person Akshay Vishnoi; 04.11.2012