Сборка ассоциаций Rails 3.1 - PullRequest
       22

Сборка ассоциаций Rails 3.1

0 голосов
/ 02 января 2012

Каждый раз, когда я создаю пользователя и вход в систему, это исключение выдается на перенаправление: Couldn't find User without an ID.

У меня есть has_many ассоциация, подобная этой:

class Post < ActiveRecord::Base
has_many :tags
belongs_to :user

attr_accessible :title, :description, :content, :tags_attributes

accepts_nested_attributes_for :tags, allow_destroy: true, reject_if: lambda {|attrs| attrs.all? {|key, value| value.blank?}}

end

, за которой следует:

class User < ActiveRecord::Base

has_many :posts
attr_accessible :codename, :password, :password_confirmation

end

Есть третья модель 'Теги', которая имеет belongs_to post но это, похоже, не вызывает проблемы.Существует также SessionsController с действиями new, create и destroy (код ниже).

Метод find_user запускается только для новых и создания действий в PostsController

before_filter :find_user

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


def new
 @post = @user.posts.build(tags: Tag.new)
  respond_to do |format|
   format.html 
  end
end

def create
 @post = @user.posts.build(params[:post])
 @tags = @post.tags.build(params[:tags])
  respond_to do |format|
  if @post.save
    format.html { redirect_to @post, notice: 'Post was successfully created.' }
  else
    format.html { render action: :new }
  end
 end
end

и методе User.authenticate / SessionsController create action

def self.authenticate(codename, password)
 user = User.find_by_codename(codename)
  unless user && user.authenticate(password)
   raise "You are not who you say you are."
  end
 user
end

def create
 session[:user_id] = User.authenticate(params[:codename], params[:password]).id 
 redirect_to action: session[:intended_action], controller: session[:intended_controller], success: "You're In!"
end

1 Ответ

0 голосов
/ 04 января 2012

Проблема кажется простой - вы сохраняете идентификатор аутентифицированного пользователя в объекте сеанса, но пытаетесь выбрать пользователя, используя params[:user_id] вместо session[:user_id]

...