'show'动作是否有可能不通过数据库?

时间:2015-10-17 07:44:57

标签: ruby-on-rails hash

例如,为了查看用户相关信息,我们可以写下:

控制器

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岁”,并在视图中写入代码?

1 个答案:

答案 0 :(得分:1)

首先,您最好查找user stories - 它会让您更清楚地描述您的需求。

  

这样我就可以转到localhost:3000/users/alex

friendly_id

安装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

enter image description here

这显示视图如何从控制器继承数据,该数据从数据库中提取数据。您质疑如何从数据库中提取视图拉取信息,答案是它不会......控制器会这样做。

Rails控制器设置实例变量,您可以在视图中调用它们来填充它们。 XML格式就是数据在它们之间传递的方式。

因此,当您意识到所有&#34;数据构建&#34;在控制器中发生,并且您的视图只是它的管道,您将能够使用您的控制器来构建您需要的数据。