将表单从一个控制器的视图传递到完全不同的控制器

时间:2014-03-22 09:43:10

标签: ruby-on-rails ruby-on-rails-4 controller form-for

好的,我已经搜索了其他可用的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"

我不知道我做错了什么:(如果有人能够帮助我,我会非常感激

2 个答案:

答案 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| %>