Каждый раз, когда я создаю пользователя и вход в систему, это исключение выдается на перенаправление: 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