Form_for提交按钮不路由以创建操作

时间:2014-03-31 01:10:30

标签: ruby-on-rails

我有一个form_for,我希望当在文本区域广告中输入文本时,单击提交按钮会调用我的控制器上的创建操作,但它会注意但保持在同一页面和浏览器上的URL从localhost:3000更改为http://localhost:3000/?utf8=✓&authenticity_token=6qNPP4KXB0B1G1X%2BG4UIakH5nhso1BJRlRJVukjL0jI%3D&speech%5Bwording%5D=&commit=Save+Speech - 我不明白这个网址在做什么?即使我在控制器中删除了我的create方法,我也应该收到一条错误说明"无法找到SpeechsController"但我只是得到那个长长的网址?

控制器:

    class SpeechsController < ApplicationController

def create
end

end

形式:

  <form class="col-lg-12">
    <div class="input-group" style="width:340px;text-align:center;margin:0 auto;">
        <%= form_for :speech, url: speechs_path do |f| %>
        <%= f.text_area :wording, :class => "form-control", :style => "height:250px;width:540px;margin:0 auto;" %><br></br>
        <%= f.submit :class => "btn btn-primary btn-lg btn-block" %>
    <% end %>
  </form>

路线:

  esources :speechs, except: [:new, :edit, :update, :destroy] do 
  collection do 
    get 'create'
  end 
end
  root "welcome#home"

2 个答案:

答案 0 :(得分:1)

首先,必须将collection do get 'create'添加到routes.rb,因为create是默认的Rails路由操作之一。

其次,如果create是HTTP POST请求,您应该使用get指定它。这就是为什么你得到那么长的网址。

在您的控制器中,在.create操作中添加create方法。例如:

def create
  @speech = Speech.create(params[:speech])
end

现在,您的视图中的表单应该是这样的:

<%= form_for Speech.new do |f| %>
  <%= f.text_area :wording %>
  <%= f.submit  %>
<% end %>
祝你好运!

答案 1 :(得分:0)

这应该是理想的方式

<强>控制器

class SpeechsController < ApplicationController

def new
 @speech = Speech.new
end

def create
  #Your Create logic here
end

end

查看请注意视图中的@speech

#app/views/speeches/new.html.erb
<form class="col-lg-12">
    <div >
        <%= form_for @speech do |f| %>
        <%= f.text_area :wording, :class => "form-control" %>
        <%= f.submit  %>
    <% end %>
  </form>

<强>路线

resources :speeches, only: [:new,:create]