rails控制器,用于获取多个表数据

时间:2013-09-29 18:20:34

标签: ruby-on-rails ruby-on-rails-3

这是我的控制器动作

@posts = Post.where(sub_category_id: params[:id]).paginate(page: params[:page], per_page: 2).to_a

post表包含category_id,sub_category_id,product_id。所有这三个表

现在我需要来自id的映射名称。我怎样才能实现它。

我尝试@sub_category = SubCategory.find params[:id]获取子类别,它可以正常工作。

上述方法是否良好?如果是,我怎么能实现它以获得其他表数据。

修改-1

我正在使用以下字段的表格

  1. ID
  2. CATEGORY_ID
  3. sub_category_id
  4. PRODUCT_ID
  5. 标题
  6. 我正在使用以下一组表格

    1. 类别
    2. 子类别
    3. 产品
    4. 在我看来,我的title是超链接。当我点击它。它会重定向到受尊重的帖子页面,我必须显示breadcrum这样的Electronics->Laptop->Dell

      修改-2

      我尝试了但是得到了错误

      undefined method `category_id' for #<ActiveRecord::Relation::ActiveRecord_Relation_Post:0xb4e7a9f0>
      

      尝试以下

        @posts = Post.where(sub_category_id: params[:id]).paginate(page: params[:page], per_page: 2).to_a
        @category = Category.find(@posts.category_id) unless @posts.blank?
      

2 个答案:

答案 0 :(得分:0)

你必须在链接中添加params,类似这样的内容:

<a href='/controller/post?category_id=1&sub_category_id=2&product_id=3'>click-here</a>

答案 1 :(得分:0)

如果您的post或其他操作中有show,您可以获得如下值:

# PostsController#show
...
@post = Post.find(params[:id])
@category = Category.find(@post.category_id)
@sub_category = SubCategory.find(@post.sub_category_id)
@product = Product.find(@post.product_id)

然后在你看来:

# show.html.erb
...
<%= @category.name + ">>" + @sub_category.name + ">>" + @product.name %>

这假设您在每个方法上都有.name方法来获取所需的文本。您还需要处理未找到Category / SubCategory / Product的情况,在这种情况下,您将获得nil。您无法在.name上调用nil方法,因此您需要做一些事情来处理这种情况。如果您只需要Category中的文字而没有其他信息,那么如何执行此操作的一个示例是:

@category = Category.find(@post.category_id)
@category_name = @category.name unless @category.blank?