В ruby ​​on rails 3 база данных доступна только из user_controller? - PullRequest
0 голосов
/ 20 августа 2011

Можно ли вытащить пользовательский объект с любого контроллера? Для меня это, кажется, работает только в моем контроллере пользователей.

Я пытаюсь отобразить форму, которую пользователь может использовать для обновления сведений, которые он зарегистрировал на веб-сайте, например, с помощью. имена, адрес электронной почты, пароль и т. д. Проблема в том, что страница не загружается (она вызывается с помощью функции .load jquery). Он не загружается, когда форма добавляется на страницу, но загружается, когда ее там нет. Я думаю, что это как-то связано с невозможностью доступа к базе данных.

На моих страницах контроллера у меня есть это:

def edit_account

    @user  = User.find(params[:id])
    case params[:view]
      when 'basic_info'
        render 'pages/settings/basic_info'
      when 'relatives'
        render 'pages/settings/relatives'
    end

    @title = "My Account"
  end

Кажется, это не работает. Я что-то пропустил? @user объект отлично работает в user_controller и связанных с ним представлениях, но не в контроллере страниц. Есть ли способ предоставить доступ к контроллеру страниц?

Спасибо

Ответы [ 3 ]

3 голосов
/ 20 августа 2011

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

Что вы можете сделать, это

@page = Page.find(params[:id]) 

И если страницыи пользователи связаны (т.е. страница принадлежит пользователю), вы можете сделать:

@user = @page.user
2 голосов
/ 20 августа 2011

Вы можете получить доступ к User с любого контроллера.

Однако способ поиска пользователя будет отличаться в зависимости от того, что params вы можете передать User.find

0 голосов
/ 20 августа 2011

Проблема в том, что вы используете неправильный ключ params в контроллере, отличном от UsersController. В других контроллерах параметры будут user_id. Итак ...

@user = User.find(params[:user_id])

Так же, как примечание об остальной части кода.

Использование зрения здесь просто неправильно. Создайте отдельные действия для ваших представлений (если вы не пытаетесь быть RESTful). Труднее поддерживать, когда представление обрабатывается внутри одного метода. Было бы лучше сказать:

def basic_info
  view_defaults
end

def relatives
  view_defaults
end

private 

def view_defaults
    @user  = User.find(params[:user_id])
    @title = "My Account"
end

И установите правильные маршруты для подключения этих действий.

...