我正在尝试通过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>
干杯
答案 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)
一切都应该好。