Rails - 如何在使用find_by(object:params [:object])时强制参数化或缩写URL。

时间:2015-07-01 16:02:03

标签: ruby-on-rails ruby

使用find_by id?

时如何强制参数化或小写的URL?

文章控制器

    def index
        if params[:category].blank?
            @articles = Article.all.order("created_at DESC")
        else
            @category_id = Category.find_by(name: params[:category]).id
            @articles = Article.where(category_id: @category_id).order("created_at DESC")
        end
    end

应用程序视图

link_to category.name, articles_path(category: category.name)

模型:

class Article < ActiveRecord::Base
    belongs_to :user
    belongs_to :category
end


class Category < ActiveRecord::Base
    has_many :articles
end

我尝试了以下内容......

link_to category.name, articles_path(category: category.name.downcase)

link_to category.name, articles_path(category: category.name).downcase

但我收到undefined 'method 'id' for nil:NilClass

我能够实现这一目标的唯一方法是为每个类别创建视图,但我希望尽可能保持干燥。

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

当文章和类别之间存在关联时...您可以获得属于Category的所有文章:

SELECT *  FROM users WHERE user = '".$_POST[user]."' AND pass = '".$_POST[pass]."'

在索引操作中将以上代码包含在文章控制器中。

在视图中......

@categories = Category.all
@categories.each do |category|
  @category ||= Category.find(category.id) if category.name.downcase == params[:name]
end
if @category
  @articles = @category.articles
else
  @articles = Article.all.order("created_at DESC")
end