我的current_user有问题吗?

时间:2014-08-20 21:58:00

标签: ruby-on-rails

我正在使用一种方法来查看用户'帖子,帖子显示正在查看的任何用户,但在命令提示符中我收到错误

  

开始GET" / feed" for 127.0.0.1 at 2014-08-20 16:04:08 -0700由UsersController处理#feed为/已完成404未在3ms内找到

     

ActiveRecord::RecordNotFound (Couldn't find User without an ID): in app/controllers/users_controller.rb:59:in 'feed'.

并保持其余的动作不会启动。

我认为我的"当前用户"可能有问题。

这是我的用户控制器中的方法

def feed
  @title = "Feed"
  @user = User.find(params[:id])# line 59
  feed = Feed.new(@user)

render 'show_feed'
end

这是我的会话助手

def signed_in?
  !!session[:user_id]
end

def current_user
  @current_user ||= User.find(session[:user_id]) if session[:user_id]
end

def current_user=(user) # set current user
  @current_user = user # session[:user_id] = user.id
end

def current_user?(user) # get current user
  user == current_user
end

def signed_in_user
  unless signed_in?
    store_location
    redirect_to signin_url, notice: "Please sign in."
  end
end

这些是我的路线

  resources :users do
    member do
      get :following, :followers, :bio, :feed, :settings
    end
  end

  get '/feed', to: 'users#feed', as: :feed

这是获取当前用户Feed的链接

<%= link_to feed_user_path(session[:user_id]) do %>

这是我的会话控制器

def create
  user = User.find_by(email: params[:session][:email].downcase)
  if user && user.authenticate(params[:session][:password])
    session[:user_id] = user.id
    redirect_back_or feed_user_path(user)
  else
    session[:user_id] = nil
    flash.now[:error] = 'Invalid email/password combination'
    render 'new'
  end
end

2 个答案:

答案 0 :(得分:0)

我认为如果您没有登录,则无法看到您的Feed。 所以正确的解决方案应该是

<%= link_to feed_user_path(session[:user_id]) if signed_in? %>

我建议另一个生活黑客 - 将其添加到你的sessions_helper:

def current_user_id
  session[:user_id]
end

所以你可以使用更漂亮的版本:

<%= link_to feed_user_path(current_user_id) if signed_in? %>

以下行是不必要的,但这不应该是问题。

get '/feed', to: 'users#feed', as: :feed

答案 1 :(得分:0)

如果已设置current_user,则无需再次搜索他。您可以这样使用current_user方法:

def feed
  @title = "Feed"
  feed = Feed.new(current_user) # or current_user.feeds.news(if setted relation)

  render 'show_feed'
end

请注意,您的方法无效,因为您没有通过路线在get请求中发送user_id

Started GET "/feed" for 127.0.0.1 at 2014-08-20 16:04:08 -0700 Processing by UsersController#feed as / Completed 404 Not Found in 3ms 

您必须将此路线定义为:

get '/feed/:user_id', to: 'feeds#feed' # or whatever is the controller.

然后你就能做到:

url/feed/123

使用旧方法搜索用户。