Передача параметров в модель - PullRequest
0 голосов
/ 20 декабря 2010

Rails 3.0.3 рубин 1.9.2p0

Проблема:

У меня есть таблица «Пользователи», в которой есть много элементов, поэтому элемент (-ы) в свою очередь принадлежит пользователям.

В моей модели item.rb я пытаюсь сохранить элемент вместе со значением для user.id, поэтому у меня есть:

self.User_ID = @user.id

это, однако, дает мне ошибку

Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id

это вызывает некоторую путаницу, так как он не может найти это, как в show.html.erb, который «оборачивает» эту страницу. <% = @ User.id%> отображает правильный идентификатор на странице

Большое спасибо заранее

** РЕДАКТИРОВАТЬ ** Действие Shorten - это действие, для которого я хочу передать параметр

class ItemsController < ApplicationController

  def redirect
    @item = Item.find_by_shortened(params[:shortened])
    if @item
      #redirect_to @item.original
      redirect_to @item.original
    else
      redirect_to :shorten
    end
  end

  def shorten
    @host = request.host_with_port
    @user = current_user

1 Ответ

0 голосов
/ 20 декабря 2010

Вам необходимо загружать модель @user в каждое действие, для которого требуется доступ к ней.Правильное отображение в действии show не гарантирует его загрузки в действие update.

Обычно в контроллере должно быть что-то подобное:

class UsersController < ApplicationController
  before_filter :load_user, :except => [ :index, :new, :create ]

  # ...

protected
  def load_user
    @user = User.find(params[:user_id] || params[:id])
  rescue ActiveRecord::RecordNotFound
    render(:text => 'Record not found')
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...