如何使用GET创建路径?

时间:2016-04-22 22:11:24

标签: ruby-on-rails ruby path controller get

如何创建一个让用户进行GET创建的路径?

<%= link_to 'New Challenge', challenges_path(name: 'foo' ) %> #takes user to index

challenges_controller

  def create
    @challenge = Challenge.new(challenge_params)
    if params[:step] == '2'
      @challenge = current_user.challenges.build(challenge_params)
      @challenge.name = challenge_params[:name]
      if @challenge.name == 'foo'
        @challenge.category = 'habit'
      else
        @challenge.category = 'goal'
      end
      @challenge.save
      redirect_to @challenge
      respond_modal_with @challenge
    end
  end

挑战/ create.html.erb

<%= simple_form_for(@challenge)  do |f| %>
  <%= hidden_field_tag :step, 2 %>
  etc..
<% end %>

2 个答案:

答案 0 :(得分:2)

你可以这样做:

首先在GET中为challenges#create创建routes.rb请求的路由,如下所示:

get 'create_challenge' => 'challenges#create'

现在,您可以使用它来获取创建路径的请求:

<%= link_to 'New Challenge', create_challenge_path(name: 'foo' ) %> 

我不知道challenge_params中的create行动是否有效,您必须通过challenge_params

如果您需要参数:{challenge: {name: 'foo'}},您可以执行以下操作:

<%= link_to 'New Challenge', create_challenge_path(challenge: {name: 'foo'}) %> 

答案 1 :(得分:0)

首先,应该通过POST请求触发创建操作(GET用于读取,如其名称所示)。

典型的CRUD控制器具有以下操作到HTTP方法的映射:

Create - POST;
Read - GET;
Update - PUT;
Delete - DELETE.

从请求到控制器#actions的路由在config / routes.rb文件中定义,如下所示:

Rails.application.routes.draw do
  post '/challenges', to: 'challenges#create', as: 'challenges_create'
end

最好阅读Rails指南 - Action ControllerRails Routing