我想在Rails 5中创建一个新页面,传递一个在我的程序中使用的变量,并在该新页面中使用它。如果这很明显,我很抱歉,我只是在学习。
我的代码如下所示:
我的视图中有一个名为用户的文件夹。该文件夹包含 show / edit / index / view 文件。从索引视图,我写了,
<%= link_to "Profile", profile_path(@users) %>
在我的路线中,我有:
get 'profile' => 'users#profile'
在用户文件夹中,我有一个名为 profile.html.erb 的视图文件。
在个人资料视图中,我正在尝试使用 @users ,但 @users 为零。
答案 0 :(得分:0)
与通过控制器中的索引方法将@users传递到索引视图的方式相同,您可以通过show方法将其传递给show视图。但我认为你要做的是链接到该个人资料,所以你会做
<%= link_to "Profile", profile_path(user.id) %>
假设您没有手动将路由更改为不在URL中使用ID。这也假设您已经通过@users循环这样的
<% @users.each do |user| %>
<%= link_to "Profile", profile_path(user.id) %>
<% end %>
您的控制器看起来像这样:
def show
@user = User.find_by_id(params[:id])
end
这将使您可以在视图中访问该用户。
答案 1 :(得分:0)
如果你有一个<%= link_to "Profile", profile_path(@users) %>
方法,并且你的路线没有被定义为什么也没有,那么你可以这样做:
a
如果您这样做,那么您会在其网址中看到一个ActiveRecord_Relation
标记<%= link_to "Profile", profile_path(user) %>
:
a
然后,您只会看到一个id
标记,其中包含该用户的users.1
(@users
),该标记取自{{1}中每个元素的迭代变量。
如果你想通过link_to
助手将变量从一个控制器传递到另一个控制器(或者也可以是相同但不同的操作),那么你需要传递它引用param
它所需要的,你可以这样做:
<%= link_to "Profile", profile_path(user: user) %>
这将发送一个名为user
的参数,您可以通过控制器中的params[:user]
访问该参数:
def profile
@user = User.find(params[:user])
end
变量为@user
,只有一个用户,它会在视图中提供,以响应users#profile
。
如果您想将@users
变量发送到控制器并在那里做任何您想做的事情,那么同样的方式,然后在您的控制器中您可以“重新分配”它:
# view
<%= link_to "Profile", profile_path(users: @users) %>
# controllers
def profile
@received_users = params[:users]
...
# the view which responds to the profile method
<%= @received_users.inspect %>