在Rails 4问题上以相同的操作管理GET和POST

时间:2014-03-26 01:23:00

标签: ruby-on-rails activerecord ruby-on-rails-4 routes

我在路线文件中有这个:

match "/register/:invitation_code", to: "users/invites#register", as: "register_by_invite", via: [:get, :post]

我有以下控制器结构:

  • 用户/ invites_controller.rb

这是我的控制器代码:

class Users::InvitesController < ApplicationController

  def GET_register
    @invite = Invite.find_by_invite_code(params[:invitation_code])
  end

  def POST_register
  end

end

我的观点结构:

  • 视图/用户/邀请/ register.html.erb

出于某种原因,所有的实例(@invite ......)都没有被发送到视图,这真的很奇怪,而且我整天都坚持这一点。

1 个答案:

答案 0 :(得分:2)

您不能像这样命名您的控制器操作。

目前,您的GET和POST请求都在尝试呈现register操作(并且您的GET_registerPOST_register请求被完全忽略)。您不需要控制器操作,因此它不使用控制器操作,它只是呈现视图register.html.erb

如果要对同一URL(使用不同的HTTP方法)使用两种不同的操作,则需要两种不同的路由。一个用于GET路由,一个用于POST路由。 editupdate将是您将用于此的常规操作名称 - 因为它是您正在执行的操作,更新Invite对象。