我讨厌问这样一个新手问题,但我确信我做的事情根本上是错误的,而且我很难找到其他同样一无所知的人。
我的 MCMPART 模型的新视图要求用户输入零件的 :length 和 :width 值。从这些值中,我想推导出 :squarefeet (:length * :width/144) 和钣金 :shearsize (:length X :width)。为此,我将模型修改如下:
class Mcmpart < ActiveRecord::Base
belongs_to :sheet
belongs_to :partloc
belongs_to :material
def squarefeet
self.squarefeet = self.length * self.width/144
end
def shearsize
self.shearsize = [self.length, self.width].join(' X ')
end
end
控制器只是通用脚手架,但这里是创建方法:
def create
@mcmpart = Mcmpart.new(params[:mcmpart])
respond_to do |format|
if @mcmpart.save
format.html { redirect_to(@mcmpart, :notice => 'Mcmpart was successfully created.') }
format.xml { render :xml => @mcmpart, :status => :created, :location => @mcmpart }
else
format.html { render :action => "new" }
format.xml { render :xml => @mcmpart.errors, :status => :unprocessable_entity }
end
end
end
为了明确模型的构建,这里是数据库迁移文件:
class CreateMcmparts < ActiveRecord::Migration
def self.up
create_table :mcmparts do |t|
t.string :partnumber
t.references :material
t.references :sheet
t.references :partloc
t.decimal :length, :precision => 10, :scale => 3
t.decimal :width, :precision => 10, :scale => 3
t.decimal :squarefeet, :precision => 10, :scale => 3
t.decimal :weight, :precision => 10, :scale => 3
t.string :shearsize
t.string :project
t.boolean :bus
t.timestamps
end
end
def self.down
drop_table :mcmparts
end
end
我相信有人会马上发现我的问题。这正在创建一个虚拟属性,该属性仅在我的 SHOW 视图中显示。但是,我想要的是将 :shearsize 和 :squarefeet 参数添加到我的数据库中。相反,我在我的数据库中得到了两个属性的 nil 值。而且由于它不是我需要的实例属性,它不受我数据库中设置的精度/比例值的约束,因此在小数点后显示多达 8 位数字。
我需要在控制器中做些什么吗?我试图用@mcmpart.shearsize 替换self.shearsize,但这只会导致我的页面失败。
感谢第一个指出我的菜鸟错误的人。
谢谢,