如何创建一个让用户进行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 %>
答案 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 Controller,Rails Routing等