首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Helper方法路由到索引的不同实例

使用Helper方法路由到索引的不同实例
EN

Stack Overflow用户
提问于 2019-06-26 03:45:14
回答 1查看 36关注 0票数 0

我有一个带有bookings#index操作的名为BookingsController的控制器。在索引操作中,有两个实例变量@pending_bookings@approved_bookings,它们通过status查询预订对象。

代码语言:javascript
复制
 def index
     @pending_bookings = Booking.where(host_id:@user.id, 
    status:'pending') 
     @approved_bookings = Booking.where(host_id:@user.id, 
    status:'approved')
 end 

我希望根据用户单击的链接将用户路由到索引的不同实例。基本上,bookings_path(@pending_bookings)应该将用户路由到显示所有pending_bookings的索引页面,相反,bookings_path(@approved_bookings)应该将用户路由到显示所有approved_bookings的索引页面。

在我看来,我有2个链接,应该分别将用户定向到每个路径。

代码语言:javascript
复制
 <%= link_to 'Pending Reservations', bookings_path(@pending_bookings)%>
 <%= link_to 'Approved Reservations', bookings_path(@approved_bookings)%> `

index.html.erb文件:

代码语言:javascript
复制
  <%= booking_index_helper_path %> 

包含一个嵌入的帮助器方法,它应该识别用户单击的路径并呈现适当的预订对象。

下面是识别用户选择的路径并渲染必要对象的(有缺陷的)逻辑:

pages_helper.rb:

代码语言:javascript
复制
 def booking_index_helper_path
    if bookings_path(@pending_bookings)
      render @pending_bookings
    elsif bookings_path(@approved_bookings)
      render @approved_bookings
    else bookings_path(@total_bookings)
      @total_bookings
    end
 end

我在帮助器方法中放入了一个binding.pry,以确认它正在被命中(确实如此)。但是,由于某些原因,当我单击链接以指向适当的对象时,总是满足第一个条件。编写此条件以识别用户选择的路径的更好方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-26 05:03:02

看起来你正在以一种比你需要的更复杂的方式来做这件事。为什么不干脆建立一个索引,比如:

代码语言:javascript
复制
 def index
   #Rails autoescapes this string so no fear of sql injection using user supplied strings
   @bookings = Booking.where(host_id:@user.id, status: "#{params[:status]}")
 end

然后使用如下链接:

代码语言:javascript
复制
 <%= link_to 'Pending Reservations', bookings_path(status: 'pending')%>
 <%= link_to 'Approved Reservations', bookings_path(status: 'approved')%> `

现在,您的视图可以只处理@bookings,而不用关心@bookings的类型,因为这是由控制器中的逻辑完成的。这是最低要求,但您应该养成向控制器添加错误消息等的习惯,因此请考虑这样做:

代码语言:javascript
复制
 def index
   if params[:status].present?
     #Rails autoescapes this string so no fear of sql injection using user supplied strings
     @bookings = Booking.where(host_id:@user.id, status: "#{params[:status]}")
     flash[:success] = "#{params[:status].titleize} Bookings loaded."
     redirect_to whatever_path
   else
     flash[:error] = "Something went wrong"
     redirect_to some_path
   end
 end
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56761039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档