我正在使用一种方法来查看用户'帖子,帖子显示正在查看的任何用户,但在命令提示符中我收到错误
开始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
答案 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
使用旧方法搜索用户。