【发布时间】: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