例如,为了查看用户相关信息,我们可以写下:
控制器
def show
@user = User.find(params[:id]) # localhost:3000/users/1
end
视图
User is <%= @user.age %> yr old # User is 18 yr old
如果我们不将信息放在数据库中,我们只需从xml提要中解析它们,并获得如下格式:
{ "Alex" => {:age => 18, :location => "Australia"}, "Peter" => {:age => 20, :location => "Canada"}}
控制器
def show
@user = ???? # localhost:3000/users/alex
end
视图
@user is <%= @user.age %> yr old # Alex is 18 yr old
我可以写什么来代替“????”在控制器中,以便我可以转到localhost:3000 / users / alex并查看“Alex是18岁”,并在视图中写入代码?
答案 0 :(得分:1)
首先,您最好查找user stories - 它会让您更清楚地描述您的需求。
这样我就可以转到
了localhost:3000/users/alex
安装gem,将以下内容添加到User
模型中,然后您就可以通过 slug 查找:
#app/models/user.rb
class User < ActiveRecord::Base
extend FriendlyID
friendly_id :name
end
这将允许您使用以下内容:
#app/controllers/users_controller.rb
class UsersController < ApplicationController
def show
@user = User.find params[:id] #-> you can send :id as either the id or name
end
end
为了实现这一目标,将需要在slug
表中添加users
列:
$ rails g migration AddSlugtoUsers
#db/migrate/add_slug_to_users______.rb
class AddSlugtoUsers
def change
add_column :users, :slug, :string
end
end
我可以写什么来替换控制器中的
????
,
你可以写任何你想要的东西。
Rails没有规则,只有指南。 Rails是一个框架,虽然更喜欢convention over configuration,但您仍然可以根据自己的需要自行完成。
当你问......
我们只是从xml提要中解析它们
你真的错了。您正在从 变量解析它们。
XML表示法只是Ruby Hash - 构建为对象,可以在视图中进行操作。
要了解其工作原理,您需要阅读Rails所基于的MVC programming pattern:
这显示视图如何从控制器继承数据,该数据从数据库中提取数据。您质疑如何从数据库中提取视图拉取信息,答案是它不会......控制器会这样做。
Rails控制器设置实例变量,您可以在视图中调用它们来填充它们。 XML格式就是数据在它们之间传递的方式。
因此,当您意识到所有&#34;数据构建&#34;在控制器中发生,并且您的视图只是它的管道,您将能够使用您的控制器来构建您需要的数据。