【问题标题】:rails namespace form does not write data to databaserails 命名空间表单不会将数据写入数据库
【发布时间】:2014-04-16 07:12:44
【问题描述】:

我是 Rails 新手,想知道为什么我的表单没有将数据写入数据库? 如果我在控制器中显示数据,例如

render text: params[:post].inspect

它向我展示了正确的细节。如果我将表单发送到数据库,则只显示一个新 id 以及 created_at 和 updated_at 数据。

也许有人可以帮助我...

这是我的文件:

日志:

tarted POST "/manage/rooms" for 127.0.0.1 at 2014-03-12 09:45:28 +0100
Processing by Manage::RoomsController#create as HTML
Parameters: {"utf8"=>"✓","authenticity_token"=>"7IrPpFfkK4Krc4u6YYpUcaCp+",
"rooms"=>{"number_of_rooms"=>"1", "occupancy"=>"1", "room_type"=>"Private Room",
"gender"=>"mixed", "title"=>"foo"}, "commit"=>"Save Rooms"} (0.2ms)  BEGIN
SQL (0.4ms)  INSERT INTO "rooms" ("created_at", "updated_at") VALUES ($1, $2) 
RETURNING "id"  [["created_at", Wed, 12 Mar 2014 08:45:28 UTC +00:00],
["updated_at", Wed, 12 Mar 2014 08:45:28 UTC +00:00]] (660.8ms)  COMMIT
Redirected to http://localhost:3000/manage/rooms/27
Completed 302 Found in 664ms (ActiveRecord: 661.3ms)

控制器:(控制器/管理/room_cont...)

class Manage::RoomsController < ApplicationController

def new
end

def create
  #render text: params[:rooms].inspect
  @room = Room.new(params[:room])
  @room.save
  redirect_to [:manage, @room]
end

def show
  @room = Room.find(params[:id])
end

private
  def room_params
  params.require(:room).permit(:number_of_rooms, :occupancy, :room_type, :gender, :title)
  end
end

型号:(models/room.rb)

 class Room < ActiveRecord::Base
 end

表单:(/views/manage/rooms/form.html...)

<%= simple_form_for [:manage, @room], manage_room_path do |f| %>
<p>
<%= f.input :number_of_rooms, collection: 1..20, :include_blank => false %>
</p>
<p>
<%= f.input :occupancy, collection: 1..20, :include_blank => false %>
</p>
<p>
<%= f.input :room_type, collection: ["Private Room", "Shared Room (Dorm)"],:include_blank => false %>
</p>
<p>
<%= f.input :gender, collection: ["mixed", "male", "female"], :include_blank => false %>
</p>
<P>
<%= f.label :title %><br>
<%= f.text_field :title %>
</p>
<p>
<%= f.submit %>
</p>
<% end %>

路线:

manage_rooms GET    /manage/rooms(.:format)            manage/rooms#index
                     POST   /manage/rooms(.:format)            manage/rooms#create
     new_manage_room GET    /manage/rooms/new(.:format)        manage/rooms#new
    edit_manage_room GET    /manage/rooms/:id/edit(.:format)   manage/rooms#edit
         manage_room GET    /manage/rooms/:id(.:format)        manage/rooms#show
                     PATCH  /manage/rooms/:id(.:format)        manage/rooms#update
                     PUT    /manage/rooms/:id(.:format)        manage/rooms#update
                     DELETE /manage/rooms/:id(.:format)        manage/rooms#destroy

谢谢!

【问题讨论】:

  • 您在控制器中收到params[:rooms] 并使用params[:room]
  • 谢谢。所以如果我理解正确的话。我只需将控制器更改为:@room = Room.new(params[:rooms]) 但随后我确实收到了如下错误:ActiveModel::ForbiddenAttributesError 我错过了什么吗?
  • 查看强大的参数

标签: ruby-on-rails ruby database forms namespaces


【解决方案1】:

在您的创建操作中:

@room = Room.new(room_params)

在您的 room_params 方法中,执行:params.require(:rooms).permit...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多