如何在没有任何参数的情况下调用我的“show”方法?

时间:2018-01-20 18:41:03

标签: ruby-on-rails ruby-on-rails-5 rails-routing

我的routes.rb文件中有这个

 checkboxes = request.getParameterValues("c1");
 days = request.getParameterValues("t1");
 int i = 0;
 if(checkboxes!=null){
     for (String title : checkboxes) {
       if(title.equals("on")){
     // your code
     }
 }

当我运行rake路线时,它会给出

resources :votes

edit_vote GET /votes/:id/edit(.:format)vote#edit         投票GET /votes/:id(.:format)投票#show

我的问题是如何在没有任何参数的情况下调用我的“/ show”方法?如果有人不提供ID,我想使用此控制器方法生成随机结果

   votes GET    /votes(.:format)                   votes#index
         POST   /votes(.:format)                   votes#create
new_vote GET    /votes/new(.:format)               votes#new

但是现在当我在浏览器中键入“/ votes”时,它会因错误

而消失
  def show
    id = params[:id]
    # If there is no person selected based on the param, choose one randomly
    if !id.present?
      if current_user
        @person = Person.joins("LEFT JOIN users ON users.id = people.user_id")
                        .where("people.user_id IS NULL")
                        .order("RANDOM()").limit(1).first
      end
      if @person.nil?
        @person = Person.order("RANDOM()").limit(1).first
      end
    else
      @person = Person.find_by_id(id)
      if current_user
        @vote = Vote.where(person_id: id, user_id: current_user.id).first || Vote.new
      end
    end
  end

1 个答案:

答案 0 :(得分:0)

至少在使用resources - resources时,您不能生成符合RESTful实践的标准路线组。在您的情况下,它正在生成get '/votes/:id', to: 'votes#show'

因为没有匹配的参数,所以它假定您尝试转到votes#index

如果你想匹配两者,我会在你的routes.rb中执行类似的操作:get '/votes(/:id)', to: 'votes#show' parens表示一个可选的参数。您可能需要在resources阻止之前添加此内容,或更改resources阻止以忽略show操作。

有关params的更多信息:http://guides.rubyonrails.org/v5.1.1/routing.html#bound-parameters