我有一个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
答案 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的帮助。非常感谢。