好的,我已经搜索了其他可用的Stackoverflow问题,我尽力解决这个问题,但是我处于一种冲击状态。我是一名PHP开发人员,但我只是在学习Ruby on Rails(Rails 4)。
我想尝试实现的目标: - POST一个表单(使用form_for),该表单位于视图index.html.erb文件中,该文件位于" Blog" (所以控制器也称为博客) - 但我希望该表单POST到一个完全不同的控制器,而不是Blog控制器,而是一个名为Feature的控制器(具体来说,是控制器中名为Feature的创建操作)
我知道我应该在form_for中使用:url组件,但我确定我输入的语法是错误的或其他地方的其他东西导致错误。
请原谅我的新手无能为力,我刚刚开始在Rails
我目前收到的错误消息:
Blog#index中的ArgumentError 错误的参数个数(3个为1..2) 提取的来源(第3行):
<h1>Blog main page, welcome</h1>
<% form_for :feature, @feature, :url => { :action => "create" } do |f| %>
<p>
<%= f.label :subject %><br>
<%= f.text_field :string %>
我的代码:
Index.html.erb(位于Blog系列下)
<h1>Blog main page, welcome</h1>
<% form_for :feature, @feature, :url => { :action => "create" } do |f| %>
<p>
<%= f.label :subject %><br>
<%= f.text_field :string %>
</p>
<p>
<%= f.label :author %><br>
<%= f.text_area :string %>
</p>
<p>
<%= f.label :title %><br>
<%= f.text_area :string %>
</p>
<p>
<%= f.label :text %><br>
<%= f.text_area :text %>
</p>
<p>
<%= f.submit %>
</p>
<% end %>
<br>
<%= link_to "My Blog", new_blog_path %>
我对功能控制器的代码
class FeatureController < ApplicationController
def index
end
def new
end
def show
end
def create
@feature = Blog.new (feature_params)
render text: params[:feature].inspect
end
private
def feature_params
params.require(:feature).permit(:title, :text, :text2, :text3)
end
end
end
我在路线配置中的代码
MyApp::Application.routes.draw do
root 'blog#index'
resources :blog
resources :admin
resources :feature
end
我的数据库架构如下所示:
create_table "blogs", force: true do |t|
t.string "subject"
t.string "title"
t.string "author"
t.text "text"
t.datetime "created_at"
t.datetime "updated_at"
我不知道我做错了什么:(如果有人能够帮助我,我会非常感激
答案 0 :(得分:2)
修改路线以使用复数格式后,解决方法是:
<%= form_for :features, :url => features_path do |f| %>
features_path
是'/features'
答案 1 :(得分:0)
您在=
标记中遗漏了form_for
。我想这会导致错误。
应该是这样的
<%= form_for :feature, @feature, :url => { :action => "create" } do |f| %>