【发布时间】:2021-07-29 23:33:30
【问题描述】:
我的控制器的#create 操作如下所示。我不知道,为什么 ruby/rails 不接受参数分配,因此我保存的对象具有“nil”属性
def create
@new_page = Page.new
@new_page.slug = helpers.create_slug_from_title(params[:title])
# Yes, I should also save the rest of params and make
# params a strongparameter object
# how to handle errors on create ?
begin
@new_page.save
rescue
end
end
如果有任何提示,我将不胜感激。
你的
冯·斯波茨
PS:在控制台中看起来并没有什么不同。
2.7.0 :038 > pn = Page.new
2.7.0 :039 > pn.slug = "index-page"
2.7.0 :040 > pn.slug
=> "index-page"
2.7.0 :041 > pn
=> #<Page id: nil, text: nil, slug: nil, created_at: nil, updated_at: nil, title: nil, streams_id: nil>
2.7.0 :042 > pn.save
(0.2ms) begin transaction
Page Create (0.6ms) INSERT INTO "pages" ("created_at", "updated_at") VALUES (?, ?) [["created_at", "2021-05-07 17:01:15.111775"], ["updated_at", "2021-05-07 17:01:15.111775"]]
(31.5ms) commit transaction
=> true
2.7.0 :043 > Page.all
Page Load (0.2ms) SELECT "pages".* FROM "pages" LIMIT ? [["LIMIT", 11]]
=> #<ActiveRecord::Relation [#<Page id: 1, text: nil, slug: nil, created_at: "2021-05-07 15:40:59", updated_at: "2021-05-07 15:40:59", title: nil, streams_id: nil>, #<Page id: 2, text: nil, slug: nil, created_at: "2021-05-07 16:46:00", updated_at: "2021-05-07 16:46:00", title: nil, streams_id: nil>, #<Page id: 3, text: nil, slug: nil, created_at: "2021-05-07 17:01:15", updated_at: "2021-05-07 17:01:15", title: nil, streams_id: nil>]>
2.7.0 :044 >
PPS:具有创建操作和 page_params 的新控制器,由 max 友情发布
class PagesController < ApplicationController
def home
end
def show
@page = Page.where(slug: params[:slug])
end
def new
@new_page = Page.new
end
def edit
@page = Page.where(slug: params[:slug])
# error if @page.nil?
end
# POST /pages
def create
@page = Page.new(page_params) do |page|
# smelly - should be handled inside the model not by the controller
page.slug = helpers.create_slug_from_title(page.title)
end
if @page.save
redirect_to @page, status: :created
else
render :new, status: :unprocessable_entity
end
end
private
def page_params
params.require(:page)
.permit(:slug, :title, :text)
end
end
【问题讨论】:
-
@new_page.valid?; @new_page.errors返回什么? -
你好塞巴斯蒂安。
(byebug) @new_page.valid? true (byebug) @new_page.errors #<ActiveModel::Errors:0x00007f0c9c8bf6a0 @base=#<Page id: 2, text: nil, slug: nil, created_at: "2021-05-07 16:46:00", updated_at: "2021-05-07 16:46:00", title: nil, streams_id: nil>, @messages={}, @details={}>但问题不在于储蓄。问题已经是assignment了。如果我尝试分配一个值并调用我刚刚“分配”一个值的相同属性,它将返回nil。再见! -
您的模型中是否有任何东西可能会在插入之前修改 slug?
-
我猜测为什么你的 slug 被保存为 nil 是因为你的模型中有
attr_accessor :slug。
标签: ruby-on-rails model-view-controller orm controller