Sql Rails 4-按请求合并多个find_
我有一个名为“Post”的模型,它有一个用户定义的guid整数字段和一个用作blog的name字段。我需要做的是,通过添加guid或name参数(但不能同时添加),找到带有帖子url的帖子,如果请求guid,它将重定向到帖子的name参数。我有一个名为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) 我设法让它工作,但我知道这是非常低效的,因为它发出两
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) %>