Sql Rails 4-按请求合并多个find_

Sql Rails 4-按请求合并多个find_,sql,ruby-on-rails,ruby,Sql,Ruby On Rails,Ruby,我有一个名为“Post”的模型,它有一个用户定义的guid整数字段和一个用作blog的name字段。我需要做的是,通过添加guid或name参数(但不能同时添加),找到带有帖子url的帖子,如果请求guid,它将重定向到帖子的name参数。我有一个名为blog的路径,我使用它作为路径,而不是post。 (例如:http://mysite/blog/53重定向到http://mysite/blog/name-given-to-the-post) 我设法让它工作,但我知道这是非常低效的,因为它发出两

我有一个名为“Post”的模型,它有一个用户定义的guid整数字段和一个用作blog的name字段。我需要做的是,通过添加guid或name参数(但不能同时添加),找到带有帖子url的帖子,如果请求guid,它将重定向到帖子的name参数。我有一个名为
blog
的路径,我使用它作为路径,而不是
post
。 (例如:
http://mysite/blog/53
重定向到
http://mysite/blog/name-given-to-the-post)

我设法让它工作,但我知道这是非常低效的,因为它发出两个几乎相同的查找请求,但我知道没有其他方法可以做到这一点

Post_controller.rb

def show
     @post = Post.find_by guid: params[:guid]
     @slug = Post.find_by_slug(params[:guid])
     if request.path != blog_path(@slug)
       redirect_to blog_path(@post)
     end
  end
我在我的路线中将
blog
映射到
post
,这就是您看到
blog\u路径的原因,例如:

get 'blog/:guid', to: 'posts#show', as: 'blog'
  resources :posts, path: 'blog', as: 'blog'
Post.rb(型号):


我不理解你帖子中的所有问题,尤其是关于
@post
@slug
的部分

为什么不将两个变量分配给同一个对象?它应该是同一个对象,无论它是通过slug或名称从数据库中获取的,还是我弄错了


您可以使用sql中的
查询查询来查询对象,如
Post.where('slug=?或name=?',params[:guid],params[:guid])

正确,但是我没有为这两个对象分配相同的原因都是因为
if request.path!=博客路径(@slug)
重定向到博客路径(@post)
行。如果它们都是@post变量,那么它就无法区分是否需要重定向。我现在说的是“如果被请求的路径不是通过名称来完成的,那么它必须是guid,所以重定向到名称。”这就是为什么它们必须是两个不同情况下的两个不同变量。你可以检查请求路径是否与slug相同。你不需要有那么多古怪的魔法。
class Post < ActiveRecord::Base

  before_create :create_slug

def to_param 
  slug
end

def create_slug
  self.slug = self.name.parameterize
end
.....
end
<%= @slug.name %>
<%= sanitize(@slug.summary) %>