我写了下面的代码,这些代码似乎不起作用,但如果我删除最后一个If语句,它确实起作用了,显然只适用于前两个用例。有没有更好的方法来写这段代码?在我的路由文件中
map.resources :galleries
map.resources :users, :has_many => :galleries用户点击链接" galleries“并查看所有已发布的画廊的列表。(mysite.com/galleries)
用户可以点击链接“我的画廊”并看到她自己的所有画廊。(mysite.com/users/21/galleries)
用户可以点击其他用户个人资料上的链接,查看该用户发布的图库。(mysite.com/users/35/galleries)
if params[:user_id].blank?
@galleries = Gallery.find(:all, :conditions => ['visibility_status= ?', true])
end
if (params[:user_id] && current_user.id.to_s == params[:user_id])
@galleries = current_user.galleries
end
if params[:user_id]
@galleries = Gallery.find(:all, :conditions => ['user_id=? and
visibility_status = ?', params[:user_id], true])
end 发布于 2009-01-21 16:24:22
首先,我不是Ruby程序员。
但是--你不应该使用if - else if - else if - end等等吗?
如果第二个条件为真,则第三个条件始终为真,因此即使在第二个测试中已经设置了@galleries,也总是使用第三个测试覆盖它。
发布于 2009-01-21 16:42:05
您拥有的路由看起来是合适的,使用这些路由,您的控制器和视图中有一堆可用的帮助器方法:例如user_galleries_url(@user)和user_galleries_url(@user, @gallery)等。看看resource routing你能做些什么。
唯一的建议是稍微修改一下您的逻辑,并将其放入一个
app/controllers/galleries_controller.rb
class GalleriesController < ActionController::Base
before_filter :get_galleries, :only => 'index'
private
def get_galleries
if params[:user_id]
if params[:user_id] == current_user.id.to_s
@galleries = current_user.galleries
else
@galleries = Gallery.find(:all, :conditions => ['user_id=? and visibility_status = ?', params[:user_id], true])
end
else
@galleries = Gallery.find(:all, :conditions => ['visibility_status= ?', true])
end
end
end您还可以在show、edit和delete操作上对get_gallery执行类似的操作。
https://stackoverflow.com/questions/465913
复制相似问题