所以我正在构建一个需要基于两种不同类型的路由的Rails站点
我有一个语言模型和一个分类模型
因此,我需要能够使用语言路线/红宝石查看顶级红宝石资源,还可以访问/书籍查看所有语言的热门书籍
我试过这样的路线
get '/:language', to: "top_voted#language"
get '/:category', to: "top_voted#category"
Run Code Online (Sandbox Code Playgroud)
问题是逻辑无法弄清楚两者之间的差异,并在后端引起了一些冲突
我也尝试过这个
Language.all.each do |language|
get "#{language.name}", to: "top_voted#language", :language => language.name
end
Category.all.each do |category|
get "#{category.name}", to: "top_voted#category", :category => category.name
end
Run Code Online (Sandbox Code Playgroud)
但问题是我们正在部署它的Heroku不允许在路由中进行数据库调用.有更简单的方法吗?我们需要能够以某种方式动态生成这些路由.
我有一个Resource
可以使用"Acts As Votable"宝石(Github页面)投票的模型.投票系统运作完美,但我试图按votes
每个Resource
有多少页面显示页面.
目前我的控制器根据标签提取资源,而不是订购:
@resources = Resource.where(language_id: "ruby")
Run Code Online (Sandbox Code Playgroud)
如果我获取一个单独的资源并调用"@ resource.votes.size",它将返回它有多少票.但是,投票是另一个表,所以我认为需要进行某种联接,但我不知道如何做.我需要的是一个很好的有序ActiveRecord
集合,我可以这样显示?
书名 - 19票
书名 - 15票
书名 - 9票
书名 - 8票
我正在通过一个包含可能重复条目的名称数据库,并尝试识别我们有哪两个,不幸的是格式有点不太理想,有些条目的名字,中间名,姓氏或处女名被捣碎成一个字符串,有些只有第一个和最后一个.
我需要一种方法来看看'John Marvulli'是否匹配'John Michael Marvulli',并能够对这些比赛进行操作.但是如果你尝试:
>>> 'John Marvulli' in 'John Michael Marvulli'
False
Run Code Online (Sandbox Code Playgroud)
它返回False.有没有一种简单的方法可以用这种方式比较两个字符串,看看是否有一个名字包含在另一个名字中?
在railscast#37中,它们显示了我想要实现的简单搜索.我有以下关联:
class Owner < ActiveRecord::Base
has_many :dogs
end
class Dog < ActiveRecord::Base
belongs_to :owner
end
Run Code Online (Sandbox Code Playgroud)
Dog模型具有属性"name",所有者也是如此.我需要能够过滤狗的列表,这样如果你输入"Fido"(狗)或"Bob"(所有者)Fido将出现在列表中.以下是当前搜索的设置方式:
model dog.rb:
def self.search(search)
if search
find(:all, :conditions => ['name LIKE ?', "%#{search}%"])
else
find(:all)
end
end
Run Code Online (Sandbox Code Playgroud)
这将仅返回与狗名称匹配的搜索词(忽略所有者名称)
我试着把它改成这样的东西:
def self.search(search)
if search
find(:all, :conditions => ['name LIKE ? or owner.name LIKE ?', "%#{search}%", "%#{search}%"])
else
find(:all)
end
end
Run Code Online (Sandbox Code Playgroud)
但是说没有所有者专栏.如何更改搜索条件以便能够搜索狗名称和所有者名称?