Rails 4 - 将一个模型中的值调用到另一个模型中

时间:2014-08-30 01:45:36

标签: ruby-on-rails

我正在创建一个卖家可以列出待售商品的市场应用。我正在创建卖家页面 - 包含卖家个人资料及其特定列表的页面。

我已经创建了包含卖家列表的页面,但我在浏览另一个模型中的名称和个人资料信息方面遇到了麻烦。

对于此处的上下文,我有2个模型 - 列表模型和用户模型。列表模型具有与用户表连接的user_id。用户表具有name,profile_image,profile_description。

我的routes.tb:

 get '/listings/s/:id' => 'listings#vendor', as: 'vendor'

我的listings_controller.rb:

  def vendor
    @listings = Listing.where(user: User.find(params[:id]))
  end

我的观点:请注意,在下面的第一行我有???。我想在那里输入user.name,这是卖家的名字。我怎么把它拉进去?一旦我知道,我可以使用相同的过程从用户模型中提取其他字段。

<h4>Listings for ??? </h4>

<div class="center">
  <div class="row">
    <% @listings.each do |listing| %>
    <div class="col-md-3 col-sm-3 col-xs-6">
        <div class="thumbnail" > 
           <%= link_to image_tag(listing.image.url(:medium), class: "img-responsive"), listing, data: { no_turbolink: true } %> 
        </div>
        <div class="caption">
            <h3><%= link_to listing.name.downcase.titleize, listing, data: { no_turbolink: true } %></h3>
            <p><%= number_to_currency(listing.price) %></p>
        </div> 
     </div>
    <% end %>
  </div>
</div>

2 个答案:

答案 0 :(得分:1)

您可以为用户设置另一个实例变量。例如:

def vendor @user = User.find(params[:id]) @listings = Listing.where(user: @user) end

然后在视图中:

<h4>Listings for <%= @user.name %> </h4>

答案 1 :(得分:1)

<强>协会

您最好查看ActiveRecord Associations

ActiveRecord是一个ORM (Object Relationship Mapper),它为您的应用程序的对象关联提供了一个抽象级别。这一点的重要性在于,如果你正确使用它,它只会使Rails运行得更快,而且还要确保你的代码简洁:

#app/models/user.rb
class User < ActiveRecord::Base
   has_many :listings
end

#app/models/listing.rb
class Listing < ActiveRecord::Base
   belongs_to :user
end

这意味着如果您调用@user对象,您也可以调用关联数据,如下所示:

def vendor
   @user = User.find params[:id]
   @listings = @user.listings
end

这个值的关系是关联然后用ActiveRecord处理(不在您的控制器中)。如果您因此更改了关联(更改模型等),您将只有一个地方可以进行所需的更改,而不必再次检查所有控制器


<强>物件

为了让您更好地理解这一点,您需要考虑objects在Rails应用程序中的角色。

由于Rails是建立在Ruby之上的(它是gem),它是一个object orientated框架。面向对象不仅仅意味着成为一个流行词 - 它是一个完整的编程实践;将软件的对象放在流程的中心(而不是逻辑驱动的流程):

enter image description here

实际上,对象只是里面有很多JSON符号数据的变量,包括数据类型等等.Rails填充模型中的对象,然后允许你在各种Rails辅助方法中使用对象。如form_for等。

这很重要的原因是因为面向对象的工作原理。您可以关联对象,操纵它们&amp;摧毁他们。这意味着你在Rails中所做的任何事情都应该基于围绕对象,这就是我上面提到的关联如此重要的原因