Ruby on rails 要重定向还是要显示部分?
我有一个用户可以有0到多个业务 我想展示:Ruby on rails 要重定向还是要显示部分?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个用户可以有0到多个业务 我想展示: 如果用户尚未创建任何业务或服务,则显示新业务页面 如果他们有1个业务或 如果有多个业务,则显示业务索引页 我应该把这个逻辑放在哪里?在视图中还是在控制器中 例如,在控制器中: if !@user.businesses.any? redirect_to new_user_business_path(@user) elsif @user.businesses.count == 1 redirect_to business_path(@user.busi
- 如果用户尚未创建任何业务或服务,则显示新业务页面
- 如果他们有1个业务或
- 如果有多个业务,则显示业务索引页
if !@user.businesses.any?
redirect_to new_user_business_path(@user)
elsif @user.businesses.count == 1
redirect_to business_path(@user.businesses.first)
elsif @user.businesses.count > 1
redirect_to businesses_path(@user)
end
或者在视图中:
<% if !@user.businesses.any? %>
<%= render partial 'no_businesses' %>
等
在视图中,这似乎不正确,但我认为最好是寻求最佳实践。如果逻辑不能与主流分离,那么可以将其作为主流的一个功能进行查看。如果逻辑是另一个逻辑的一部分,则控制逻辑的代码应放入控制器,或者如果代码太大,则放入控制器的助手 因此,如果只是主视图的一部分,即没有
else
语句,或者如果它有else
语句,但没有重大更改或呈现,则可以将逻辑作为其一部分放入视图中:
<% if !@user.businesses.any? %>
<%= render partial 'no_businesses' %>
<% end %>
如果您有else
语句,并且它对主操作视图有重大更改,请将逻辑放入contoller,并为每种情况生成两个视图
但是对于您的情况,我会将逻辑或控制器的助手放在控制器内使用。如果您的用户要查看@相同的url,而只是根据某些逻辑(例如,他们拥有的业务数量)查看不同的视图,则您需要基于视图的逻辑 如果上述情况适用于所有人(我诚实地认为不应该如此),那么就把逻辑放在视图中 如果您想要分离的URL,那么将其放入控制器中,正如您在上面所指定的那样
for user with no business: http://www.application.com/businesses/new
for user with 1 business: http://www.application.com/**business_name**
for user with many businesses: http://www.application.com/user/1/businesses
我想它适合你 在
业务
控制器中,在过滤器前添加一个过滤器,并放入逻辑
before_filter :check_status
private
def check_status
if @user.businesses.blank?
redirect_to new_user_business_path(@user)
elsif @user.businesses.count == 1
redirect_to business_path(@user.businesses.first)
end
end
它应该只在控制器中!您正试图从哪个页面或控制器操作执行此操作?您希望从哪个页面/情况显示此详细信息?您正在运行哪个版本的Rails?这不是Rails版本的问题,而是MVC体系结构的问题
before_filter :check_status
private
def check_status
if @user.businesses.blank?
redirect_to new_user_business_path(@user)
elsif @user.businesses.count == 1
redirect_to business_path(@user.businesses.first)
end
end