我正在创建一个卖家可以列出待售商品的市场应用。我正在创建卖家页面 - 包含卖家个人资料及其特定列表的页面。
我已经创建了包含卖家列表的页面,但我在浏览另一个模型中的名称和个人资料信息方面遇到了麻烦。
对于此处的上下文,我有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>
答案 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框架。面向对象不仅仅意味着成为一个流行词 - 它是一个完整的编程实践;将软件的对象放在流程的中心(而不是逻辑驱动的流程):
实际上,对象只是里面有很多JSON符号数据的变量,包括数据类型等等.Rails填充模型中的对象,然后允许你在各种Rails辅助方法中使用对象。如form_for
等。
这很重要的原因是因为面向对象的工作原理。您可以关联对象,操纵它们&amp;摧毁他们。这意味着你在Rails中所做的任何事情都应该基于围绕对象,这就是我上面提到的关联如此重要的原因