Ruby on rails 4 Rails 4:将自定义创建操作路由到两个不同的新操作

Ruby on rails 4 Rails 4:将自定义创建操作路由到两个不同的新操作,ruby-on-rails-4,routing,Ruby On Rails 4,Routing,在我的控制器中,我创建了两个独立的新操作。一个是asknowd,另一个是offernew。我需要在创建它们时为每个设置一个值,因此我尝试为每个创建一个单独的create操作,在其中我可以设置两个不同的值 def newoffer @request = Request.new @request.requesttype = "offer" end def newask @request = Request.new @request.request

在我的控制器中,我创建了两个独立的
新操作。一个是
asknowd
,另一个是
offernew
。我需要在创建它们时为每个设置一个值,因此我尝试为每个创建一个单独的
create
操作,在其中我可以设置两个不同的值

  def newoffer
     @request = Request.new
     @request.requesttype = "offer"
  end

  def newask
     @request = Request.new
     @request.requesttype = "ask"
  end
自定义创建操作:

def createask
   @request = Request.new(request_params)
   @request.requesttype = "ask"

respond_to do |format|
    if @request.save
            format.html { redirect_to @request, notice: 'Request was successfully created.' }
            format.json { render :show, status: :created, location: @request }
        else
            format.html { render :new }
            format.json { render json: @request.errors, status: :unprocessable_entity }
        end
    end
end

def createoffer
    @request = Request.new(request_params)
    @request.requesttype = "offer"

respond_to do |format|
  if @request.save
    format.html { redirect_to @request, notice: 'Request was successfully created.' }
    format.json { render :show, status: :created, location: @request }
  else
    format.html { render :new }
    format.json { render json: @request.errors, status: :unprocessable_entity }
  end
end
end

所有操作都正常工作,但我不知道如何将
新建
操作路由到各自的
创建
操作。顺便问一下,在路由方面有哪些好的资源?这是我遇到的最大问题

为了避免单独的新建和创建操作来设置requesttype默认值,您可以通过url传入该值,并将其存储在隐藏的表单字段中:

链接:

link_to('New offer', new_request_path(requesttype: 'offer'))
link_to('New ask', new_request_path(requesttype: 'ask'))
def new
  @request = Request.new(requesttype: params[:requesttype])
end
控制器:

link_to('New offer', new_request_path(requesttype: 'offer'))
link_to('New ask', new_request_path(requesttype: 'ask'))
def new
  @request = Request.new(requesttype: params[:requesttype])
end
表格

form_for(@request) do |f|
  f.hidden_field :requesttype
end
确保在模型层验证requesttype,以防有人弄乱URL

class Request < ActiveRecord::Base
  validates_inclusion_of :requesttype, in: %w{ offer ask }
end
类请求
我不明白为什么你真的需要复制所有的代码来只产生一个差异……我想一定有更好的方法。谢谢我如何根据新视图中requesttype的值进行条件依赖,这样我就可以有一个像“new Offer”或“new Request”这样的头?