我还在学习轨道并且已经做了很多阅读,但我不太清楚params如何显示'行动尚未奏效。
例如我们有UsersController,' index'操作向所有用户显示代码@user = User.all
,并显示'通过使用代码@user = User.find(params[:id])
据我所知,他们都来自数据库,其中User是模型。
但是在我的方案中,如果我在视图中显示的数据不会通过数据库,而是在'索引'行动就是这样的 -
@user = [{name => "alex"}, {name => "peter"}, {name => "john"}]
并在我的演出'动作,如何编写代码以便按名称查找用户?
答案 0 :(得分:2)
在您的Rails应用中,您在视图中显示的数据不一定必须来自/通过数据库。您始终可以在视图中显示所需的任何数据。
例如,在您的index
操作中,如果您有:
@users = [{name => "alex"}, {name => "peter"}, {name => "john"}]
然后,在index
视图中,您只能通过遍历@users
实例变量来显示这些用户。
同样适用于show
页面。
如果要在show
页面中按名称显示用户,则必须在实例变量中按名称设置用户,例如@users_by_name
:
@users_by_name = User.find_by(name: user_name)
# or you can hard code the values if you want like index action
然后这个@users_by_name
实例变量将在您的show
视图中可用,以便您可以遍历该变量并显示用户名。
最初,show
页面用于显示特定的用户相关信息,但您可以根据惯例显示您想要的任何信息。
为了能够拥有这样的路线:localhost:3000/users/alex
,它会显示用户alex
的信息,您可以在routes.rb
文件中添加路线:< / p>
get 'users/:name', to: "users#show"
并且,在您的控制器的show
操作中,类似这样的内容:
def show
@user = User.find(params[:name])
end
然后,在您的视图页面中显示@user
信息。
P.S。通过名称查找用户不是一个好主意,因为在数据库中可能有多个具有相同名称的用户,并且在这种情况下会产生冲突/或提供错误的数据。
答案 1 :(得分:2)
在show action中,我们不是全部搜索用户特定记录。
因此,我们必须提供一些唯一标识符作为参数来查找特定记录。
例如。您的观点应与我们传递的参数类似,如下所示:
<% @user.each do |user| %><br>
<%= link_to user.name, user_show_path+"?name="+user.name %><br>
<% end %><br>
在show action中,编写代码
def show
@user = User.find_by(:name => params[:name])
end
同样在routes.rb中,编写以下代码:
get 'users/:name', to: "users#show"
对于上述解决方案,请确保名称字段是唯一的。
答案 2 :(得分:0)
我原来的问题是,如果有可能显示&#39;行动不通过数据库
不确定
如果你想要的话,你的节目动作如下:
#app/controllers/users_controller.rb
class UsersController < ApplicationController
def show
@user = "me"
end
end
你真的不必在你的应用程序中做任何特定的事情,Rails只是一个框架,并且如果你希望它有效地工作,它有一定的约定。
您要问的是,您是否可以从第三方数据集中填充@user
个对象...
... 是的,你可以 ......
这样做的方法是在模型中,而不是控制器:
#app/models/user.rb
class User < ActiveRecord::Base
# populates from Hash
end
然后,您可以再次从模型中填充控制器中的数据:
#app/controllers/users_controller.rb
class UsersController < ApplicationController
def show
@user = User.__________ #-> pull from your hash
end
end
按名称查找用户
这很简单 - 只需将name
传递给网址:url.com/users/marine_lorphelin
这会将:id
参数设置为marine_lorphelin
,您可以使用该参数在模型中查找名称:
#app/controllers/users_controller.rb
class UsersController < ApplicationController
def show
@user = User._______
end
end
如果您使用的是包含用户模型的数据库,则可以使用以下内容:
def show
@user = User.find_by name: params[:id]
end
由于您不是,您必须以某种方式将XML哈希附加到您的模型中。这个,我不知道没有具体内容,例如您从哪里获取数据,如何访问它,以及您要发送哪些路由来调用它。