Ruby on Rails: передача параметров из других контроллеров в модель - PullRequest
1 голос
/ 27 января 2010

У меня в users_controller:

@user = User.new(params[:user])

Передача параметров в модель User, которая работает нормально.

Мне нужно передать некоторые дополнительные параметры, помеченные как «профиль», пользовательской модели через контроллер пользователя.

Это не сработало:

    @user = User.new(params[:user, :profile])

Никто не делал этого:

    @user = User.new(params[:user], params[:profile])

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

Я использую fields_for, который отлично работает, чтобы передать эти поля в контроллер пользователя:

  <% fields_for "profile" do |fa| %>

Мне не нужны / не нужны вложенные отношения. Мне просто нужно передать некоторые дополнительные параметры, указанные в представлении модели.

Спасибо!

Ответы [ 3 ]

1 голос
/ 27 января 2010

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

Если у вас есть атрибут профиля в вашей модели, вы можете сделать параметр профиля частью коллекции params [: user], и это будет правильно назначать атрибут.

Вы делаете это, называя поля:

text_field_tag(user[profile], "val") 

text_field_tag(user[profile][name], "val") 
0 голосов
/ 27 января 2010

Спасибо Тоби!

Просто чтобы добавить к его ответу.Мне пришлось добавить

attr_accessor :profile

в пользовательскую модель для доступа к этому элементу.

Так что все выглядит так:

Вид:

<%= text_field_tag :profile, params[:profile] %></p>

Контроллер:

@user.profile = params[:profile]

Модель:

  attr_accessor :profile

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

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

Попробуйте:

@user = User.new(params[:user])
@user.profile = Profile.new(params[:profile])

или

@user = User.new(params[:user])
@user.attributes = params[:profile]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...