初心者の質問には嫌ですが、私は根本的に何か間違っていると確信しています。無知。MYSQLバックエンドを使用したRuby on Railsの仮想属性とインスタンス属性の違い
私のMCMPARTモデルの新しいビューでは、長さと幅の値を入力する必要があります。これらの値からsquarefeet(:length *:width/144)と板金:shearsize(:長さX:幅)を求めたいと思います。次のようにこれを行うために、私は私のモデルを変更した:
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 paramsをデータベースに追加することです。代わりに、私のデータベースの両方の属性の値がゼロになっています。そして、それは私が必要とするインスタンス属性ではないので、私のデータベースに設定された精度/位取りの値に支配されていないので、小数点以下8桁まで表示します。
コントローラーで何かする必要がありますか?私はself.shearsizeを@ mcmpart.shearsizeに置き換えようとしましたが、それは単に私のページが失敗する原因になります。
私のルーキーエラーを指摘する最初の人に誇り。
は、私はあなたの問題を解決しようとしているという仮定を以下に基づいて
コントローラから作成アクションを投稿してください。 – Bohdan
コントローラコードが追加されました。ありがとうございました。 – Byron