无法通过Ruby中的form_for Rails保存数据:未经许可的参数:projectImages

时间:2016-04-07 01:08:20

标签: ruby-on-rails form-for

我正在尝试通过form_for保存表单数据 new.erb.html

<%= form_for @project do |f| %>
  <h4>
    <label for = "projectName">Title(required)</label>
    <%= f.text_field :projectName, :maxlength => 50 %>
  </h4>

  <%= f.submit %>
<% end -%>

ProjectsController

    class Com::A::B::C::ProjectsController < ApplicationController
      def index
        @projects = Project.all
      end

      def new
        @project = Project.new
        @allTags = Tag.all
        @allBenefits = Benefit.all
      end
def create
    @project = Project.new(project_params)

    if @project.save
      redirect_to :action => 'index'
    else
      render :action => 'new'
    end
  end
def project_params
    params.require(:project).permit(:projectName)
  end

但是没有在数据库中保存

text_fiels的html标签看起来像,

<input id="com_a_b_c_project_projectName" type="text" name="com_a_b_c_project[projectName]" size="50" maxlength="50">

我尝试添加url=>"com_a_b_c_project_path"但仍然没有任何内容 我是红宝石的新手,所以任何帮助都会很好。

路线

namespace :com do
        namespace :a do
          namespace :b do
            namespace :c do
              get 'projects/index'
              resources :projects do
                 end
            end
          end
        end
      end

我得到以下例外:

param缺失或值为空:项目

请求

Parameters:
"utf8"=>"✓",
 "authenticity_token"=>"",
 "com_a_b_c_project"=>{"projectName"=>"s"
 "commit"=>"Create Project"

rake rotes

com_a_b_c_projects_index GET /com/a/b/c/projects/index(.:format)com / a / b / c / projects #index       com_a_b_c_projects GET /com/a/b/c/projects(.:format)com / a / b / c / projects #index                                       POST /com/a/b/c/projects(.:format)com / a / b / c / projects #create    new_com_a_b_c_project GET /com/a/b/c/projects/new(.:format)com / a / b / c / projects#new   edit_com_a_b_c_project GET /com/a/b/c/projects/:id/edit(.:format)com / a / b / c / projects #edit        com_a_b_c_project GET /com/a/b/c/projects/:id(.:format)com / a / b / c / projects #show                                       PATCH /com/a/b/c/projects/:id(.:format)com / a / b / c / projects#update                                       PUT /com/a/b/c/projects/:id(.:format)com / a / b / c / projects#update                                       删除/com/a/b/c/projects/:id(.:format)com / a / b / c / projects#destroy

注意 我可以使用form_tag 保存数据 但不是form_for ... 但是我需要使用form_for,否则我必须将对象绑定到每个字段

<%= form_tag :action => 'create', :controller => 'projects' do %>
<h4><label for = "projectName">Title(required)</label> <%= text_field 'project', 'projectName'> </h4>

干杯

2 个答案:

答案 0 :(得分:2)

Rails docs提供了有关在2.3.1节中使用form_for命名空间的信息:

  

如果您创建了命名空间路由,form_for有一个漂亮的简写   对于那个。如果您的应用程序具有管理命名空间,那么

     

form_for [:admin, @article]

     

将创建一个提交到ArticlesController内的表单   admin命名空间(提交到admin_article_path(@article)   更新的情况)。如果你有几个级别的命名空间,那么   语法类似:

     

form_for [:admin, :management, @article]

所以在你的情况下它看起来会是:

form_for [:com, :a, :b, :c, @project]

答案 1 :(得分:1)

在您的控制器中,您需要一个项目&#39; param by the line:

params.require(:project).permit(:projectName)

但是查看请求时,发送的参数是&#39; com_a_b_c_project&#39;。

如果您将其更改为:

params.require(:com_a_b_c_project).permit(:projectName)
一切都应该好。