在新页面Rail 5中使用变量?

时间:2017-05-22 00:13:09

标签: ruby-on-rails ruby-on-rails-5

我想在Rails 5中创建一个新页面,传递一个在我的程序中使用的变量,并在该新页面中使用它。如果这很明显,我很抱歉,我只是在学习。

我的代码如下所示:

我的视图中有一个名为用户的文件夹。该文件夹包含 show / edit / index / view 文件。从索引视图,我写了,

<%= link_to "Profile", profile_path(@users) %>

在我的路线中,我有:

get 'profile' => 'users#profile'

用户文件夹中,我有一个名为 profile.html.erb 的视图文件。

在个人资料视图中,我正在尝试使用 @users ,但 @users 为零。

2 个答案:

答案 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 %>