我是铁杆新手,所以任何解释&建议非常感谢。
user
查看该页面而不仅仅是current_user
,但我不确定如何在我的控制器中正确定义实例变量@user
static_pages_controller.rb
我有以下操作recruiterpg
static_pages_controller.rb
def recruiterpg
@user = User.find(params[:user_id])
@adverts = @user.adverts
@applications = @user.forms
end
在我的控制器中,我已将user
定义为@user = User.find(params[:user_id])
,但这会破坏我在视图中的代码; views/static_pages/recruiterpg.html.erb
当我将user
定义为@user = current_user
时,我的视图中的代码完全正常
我想要做的是:对于我的观点,
recruiterpg.html.erb
,我想 任何user
都可以查看该页面,而不仅仅是current_user
查看页面。能有人劝告我并向我解释如何 在我的@user
中正确定义status_pages_controller.rb
。我也 尝试了@user = User.find(params[:id])
,但我的代码仍然在 views - 我收到错误消息
Couldn't find User without an ID
答案 0 :(得分:2)
您需要确保将user_id传递给recruiterpg操作。例如,在浏览器中尝试此URL(将user_id设置为split
表中的已知ID):
http://localhost:3000/dashboard?user_id=1
建议修改您的操作:
'1234.12'.split('.')
答案 1 :(得分:2)
如果未定义params [:user_id],您希望找到一种方法来显示正在定义 的内容。
如果将以下语句抛出控制器......
def recruiterpg
...
puts params
...
end
...当您加载页面时,您应该会在控制台中看到类似以下内容的内容......
{"controller"=>"static_pages", "action"=>"recruiterpg", "id"=>"49"}
查看the Rails参数指南。它们可以通过三种方式之一进行定义。
One:作为查询字符串,类似于Sean上面的回答。
二:路由参数。请参阅Rails指南中的第4.3节。在您的情况下,这意味着您应该在routes.rb
中具有以下内容:
get '/dashboard/:user_id' => 'staticpages#recruiterpg'
请注意,该字符串中的:user_id
没有任何魔力。
三:来自表格,这似乎不适用于此处,因为用户没有提交数据。
答案 2 :(得分:1)
由于您是新手,以下是您的一些信息:
用户素材
首先,解决错误的最佳方法是识别您的user story。
A"用户故事"是一个软件原则,您可以在其中放置用户的观点"首先 - 解释软件应如何在用户如何使用它的条件下工作。
您的问题的一个主要问题是您的用户故事非常薄弱;很难解决你想要实现的目标。
下次您提出问题时,在提供代码段之前,您应该尽力描述用户应该如何查看您的应用:)
<强>控制器强>
您的主要问题是antipattern。
反模式基本上是&#34; hack&#34;这可能会在将来破坏你应用的另一部分。有点像软件的胶带):
#app/controllers/static_pages_controller.rb
class StaticPagesController < ApplicationController
def recruiterpg
@user = User.find(params[:user_id])
@adverts = @user.adverts
@applications = @user.forms
end
end
所以您要显示静态页面,但是您想用数据填充它吗?
嗯...
#config/routes.rb
resources :users do
resources :recruiters, only: :index #-> url.com/users/:user_id/recruiters
end
#app/controllers/recruiters_controller.rb
class RecruitersController < ApplicationController
def index
@user = User.find params[:user_id]
@adverts = @user.adverts
@applications = @user.forms
end
end
这将允许您填充以下视图:
#app/views/recruiters/index.html.erb
<%= @adverts %>
-
在此处注意控制器/路由的结构非常重要。
您遇到的问题是您正在调用静态页面&#34;并希望有可用的params来找到User
。如果您有可用的参数,则仅会发生...
<强> PARAMS 强>
Rails不是魔术,因此如果你想查找用户,你必须提供这样做的参数。
这就是您能够查找current_user
的原因 - 已经为此用户设置了参数。
因此,您需要使用名为nested routes的内容来获取<{1}}的用户ID 其他:
current_user