我有一个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"
答案 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]