根据另一个(部门)的值从一个表(产品)中提取记录

时间:2013-11-20 15:42:42

标签: ruby-on-rails ruby-on-rails-3.2

我有一个Products表和一个Departments表。 产品型号:

has_one :department

在部门模型中:

belongs_to :products

我的产品控制器中也有一个视图,列出所有部门:

<% @departments.each do |department| %>
            <div class="column_entry">
                <%= link_to image_tag(department.image_attachment), products_of_a_given_main_cat_url %>
            </div>
<% end %> 

那些负载很好。当我点击其中一个图像时,我想要products_of_a_given_main_category视图,以动态填充我点击其图像的部门的产品。

在我的产品控制器中:

def products_of_a_given_main_cat

  @products = Product.all
  @department = Department.where(:name == :department)

  respond_to do |format|
    format.html # index.html.erb
    format.json { render json: @products }
  end
end

并在视图中:

<div class="the_grid_prod">
    <% @products.each do |product| %>
        <% if product.department == @department.name %>
            <div class="column_entry">
            <%= link_to image_tag(product.product_image.url(:normal_page_size)), products_content_url(product.id) %>
        </div>
        <% end %>
    <% end %>
</div> 

当我点击某个部门的图片时,我肯定有产品页面加载但没有产品。我确定我做的事情非常错,但我不确定它是什么。

路径文件中的

 get 'products/products_of_a_given_main_cat' => :products_of_a_given_main_cat, :as => :products_of_a_given_main_cat

2 个答案:

答案 0 :(得分:0)

问题在于:

@department = Department.where(:name == :department)

:department是一个符号,而不是一个字符串,而不是一个变量。基本上它是一个深刻的数字,绝对不是一个名字。此外,这将评估名称为false的部门。不要在where部分做评估,只做哈希。

如果从请求中获取,则需要params[:department]

@department = Department.where(:name => params[:department])

更新

请修改您的请求链接:

<%= link_to image_tag(department.image_attachment), products_of_a_given_main_cat_url(:department => department.name) %>

这将为请求引入一个新参数,它将适用于上面描述的条件。

答案 1 :(得分:0)

所以为了解决这个问题,我在@TomL的评论中提出了改变我的联想。我还改变了以下内容:

在产品控制器中我删除了

@department = Department.where(:name => params[:department])

并更改了

  @products = Product.all

 @products = Product.where(:department => params[:department])

products_of_a_give_main_category_view现在看起来像这样:

<div class="the_grid_prod">
    <% @products.each do |product| %>
        <div class="column_entry">
            <%= link_to image_tag(product.product_image.url(:normal_page_size)), products_content_url(product.id) %>
        </div>
    <% end %>
</div> 

感谢@Matzi和@TomL的帮助。非常感谢。