Rails 运行 : 在 /new 和 /edit _form 中获取路由

Rails run :get route within /new and /edit _form

我有一个 _form 用于 newedit 用于 @Giveaway 对象。在这个表格中,我有一个随机获胜者的字段。

我想通过使用 <%= button_to "Randomly Pick Winner!", {:action => 'choose_winner'}, :method => :get %> 调用方法 giveaways#random_winner 来填充此字段,但在加载 /giveaways/new.[=22= 时出现此错误 No route matches {:action=>"choose_winner", :controller=>"giveaways"} ]

这是我的控制器:

  def choose_winner
    random_winner = SubscriberUser.where(user_id: current_user.id).pluck(:subscriber_id).sample(1)
    session[:random_winner] = random_winner
    redirect_to :back
  end

以下是我试过的路线。我还不太擅长非脚手架路线:

  resources :giveaways do
    member do        
      get 'choose_winner' => 'giveaways#choose_winner'
      #tried get :choose_winner, as: :choose_winner
      #tried get 'new/choose_winner'
      #tried get 'choose_winner'
      #tried get 'choose_winner', to: 'giveaways#choose_winner', as: 'choose_winner'
    end
  end

问题 -- 为什么我在路由中定义了控制器和动作后页面没有加载?当我执行 运行 该路线时,我是否必须重新加载页面...是否有更好的方法来获取此数据?

您的 routes.rb 已关闭

resources :giveaways do 
  member do
    get :choose_winner
  end
end

然后我会使用 Rails 路由助手,这样您就不必担心自己设置 action/controller。

<%= button_to "Randomly Pick Winner", choose_winner_giveaway_path(@giveaway), method: :get %>