草庐IT

DEA各种模型原理及stata代码实现

wonder1322 2023-07-13 原文

DEA各种模型原理及stata代码实现

DEA各种模型原理及stata代码实现

一、CCR和BCC

1.原理

CCR模型产出导向下的效率通过求解以下规划得出:
C C R _ T E = m a x θ CCR\_ TE = max \theta CCR_TE=maxθ

s . t . ∑ k = 1 K z k y k m ≥ y k m θ m , m = 1 , . . . , M s.t. \sum_{k=1}^Kz_{k}y_{km}\geq y_{km}\theta_{m},m=1,...,M s.t.k=1Kzkykmykmθm,m=1,...,M

∑ k = 1 K z k x k n ≤ x k n , , n = 1 , . . . , N \kern2em\sum_{k=1}^Kz_{k}x_{kn}\leq x_{kn},,n=1,...,N k=1Kzkxknxkn,,n=1,...,N

z k ≥ 0 \kern2emz_{k}\geq 0 zk0

其中, ( ∑ k = 1 K z k y k m , ∑ k = 1 K z k x k n ) (\sum_{k=1}^Kz_{k}y_{km},\sum_{k=1}^Kz_{k}x_{kn}) (k=1Kzkykm,k=1Kzkxkn)可以理解为前沿面, ( x k m , y k m ) (x_{km},y_{km}) (xkm,ykm)为每个决策单元(dmu)的值。

BCC模型在上述规划的约束条件中加入 ∑ k = 1 K z k = 1 \sum_{k=1}^Kz_k=1 k=1Kzk=1.

2.效率测算stata代码

代码格式如下:

CCR模型对应规模报酬不变crs

dea inputvars = outputvars ,rts(crs) 

BCC模型对应规模报酬可变vrs

dea inputvars = outputvars ,rts(vrs) 

3.Malmquist指数

3.1M指数

Malmquist指数是效率的变化率,简单地想,如果以t期为基期,那么公式为:
M a l m q u i s t t = D t ( x t + 1 , y t + 1 ) D t ( x t , y t ) Malmquist_t=\dfrac{D^t (x^{t+1},y^{t+1})}{D^t(x^t,y^t)} Malmquistt=Dt(xt,yt)Dt(xt+1,yt+1)
其中, D t ( x t + 1 , y t + 1 ) D^t(x^{t+1},y^{t+1}) Dt(xt+1,yt+1)某一个决策单元在t+1期的生产情况基于t期的前沿面计算的效率(决策单元在t+1期的生产情况可能超出t期的前沿面,因此可能无解);

D t ( x t , y t ) D^{t}(x^{t},y^{t}) Dt(xt,yt)某一个决策单元在t期的生产情况基于t期的前沿面计算的效率,也就是正常来说的 T E t TE_t TEt

同样的,如果以t+1期为基期,那么公式为:
M a l m q u i s t t + 1 = D t + 1 ( x t + 1 , y t + 1 ) D t + 1 ( x t , y t ) Malmquist_{t+1} =\dfrac{D^{t+1}(x^{t+1},y^{t+1})}{D^{t+1}(x^t,y^t)} Malmquistt+1=Dt+1(xt,yt)Dt+1(xt+1,yt+1)
基期不同值不同,为了解决这个问题,定义:

M a l m q u i s t t + 1 , t = ( M a l m q u i s t t × M a l m q u i s t t + 1 ) 0.5 = M ( x t + 1 , y t + 1 , x t , y t ) Malmquist_{t+1,t} =(Malmquist_{t}\times Malmquist_{t+1})^{0.5} =M(x^{t+1},y^{t+1},x^t,y^t) Malmquistt+1,t=(Malmquistt×Malmquistt+1)0.5=M(xt+1,yt+1,xt,yt)

= [ D t ( x t + 1 , y t + 1 ) D t ( x t , y t ) × D t + 1 ( x t + 1 , y t + 1 ) D t + 1 ( x t , y t ) ] 0.5 =[\dfrac{D^{t}(x^{t+1},y^{t+1})}{D^t(x^t,y^t)}\times \dfrac{D^{t+1}(x^{t+1},y^{t+1})}{D^{t+1}(x^t,y^t)}]^{0.5} =[Dt(xt,yt)Dt(xt+1,yt+1)×Dt+1(xt,yt)Dt+1(xt+1,yt+1)]0.5

= D t + 1 ( x t + 1 , y t + 1 ) D t ( x t , y t ) × [ D t ( x t + 1 , y t + 1 ) D t + 1 ( x t + 1 , y t + 1 ) D t ( x t , y t ) D t + 1 ( x t , y t ) ] 0.5 =\dfrac{D^{t+1}(x^{t+1},y^{t+1})}{D^t(x^t,y^t)}\times [\dfrac{D^{t}(x^{t+1},y^{t+1})}{D^{t+1}(x^{t+1},y^{t+1})}\dfrac{D^{t}(x^{t},y^{t})}{D^{t+1}(x^t,y^t)}]^{0.5} =Dt(xt,yt)Dt+1(xt+1,yt+1)×[Dt+1(xt+1,yt+1)Dt(xt+1,yt+1)Dt+1(xt,yt)Dt(xt,yt)]0.5

= T E C H × T E C C H =TECH \times TECCH =TECH×TECCH ------- Fare分解

其中:TECH表示效率变化,TECCH表示技术进步.

在规模报酬不变时,Fare分解完全正确,但是在规模报酬可变时,须考虑规模报酬的变化

T F P C H = M ( x t + 1 , y t + 1 , x t , y t ) TFPCH= M(x^{t+1},y^{t+1},x^t,y^t) TFPCH=M(xt+1,yt+1,xt,yt)

= D v t + 1 ( x t + 1 , y t + 1 ) D v t ( x t , y t ) × [ D c t ( x t + 1 , y t + 1 ) D t + 1 ( x t + 1 , y t + 1 ) D t ( x t , y t ) D t + 1 ( x t , y t ) ] 0.5 × D c t + 1 ( x t + 1 , y t + 1 ) / D v t + 1 ( x t + 1 , y t + 1 ) D c t ( x t , y t ) / D v t + 1 ( x t , y t ) =\dfrac{D^{t+1}_v(x^{t+1},y^{t+1})}{D^t_v(x^t,y^t)}\times [\dfrac{D^{t}_c(x^{t+1},y^{t+1})}{D^{t+1}(x^{t+1},y^{t+1})}\dfrac{D^{t}(x^{t},y^{t})}{D^{t+1}(x^t,y^t)}]^{0.5}\times \dfrac{D^{t+1}_c(x^{t+1},y^{t+1})/D^{t+1}_v(x^{t+1},y^{t+1})}{D^{t}_c(x^{t},y^{t})/D^{t+1}_v(x^{t},y^{t})} =Dvt(xt,yt)Dvt+1(xt+1,yt+1)×[Dt+1(xt+1,yt+1)Dct(xt+1,yt+1)Dt+1(xt,yt)Dt(xt,yt)]0.5×Dct(xt,yt)/Dvt+1(xt,yt)Dct+1(xt+1,yt+1)/Dvt+1(xt+1,yt+1)

= T E C H × T E C C H × S E C H =TECH \times TECCH \times SECH =TECH×TECCH×SECH -----------RD分解

其中, D c D_c Dc表示按规模报酬不变计算效率, D v D_v Dv表示按规模报酬可变计算效率,SECH表示规模变化。

3.2Global-Malmquist指数

Malmquist指数可能无解!

因此有Global Malaquist指数,思想很简单,计算一个全局效率,以他为基准,公式为:

G M = M c G ( x t , y t , x t + 1 , y t + 1 ) = D c G ( x t + 1 , y t + 1 ) D c G ( x t , y t ) GM = M^G_c(x^t,y^t,x^{t+1},y^{t+1})=\dfrac{D^G_c(x^{t+1},y^{t+1})}{D^G_c(x^t,y^t)} GM=McG(xt,yt,xt+1,yt+1)=DcG(xt,yt)DcG(xt+1,yt+1)

其中, D G D^G DG表示基于全局前沿面的效率。 D t D^t Dt的计算方式是仅保留第t期的数据来计算效率,而 D G D^G DG是将所有数据都保留来计算效率(不会无解)。

M c G ( x t , y t , x t + 1 , y t + 1 ) M^G_c(x^t,y^t,x^{t+1},y^{t+1}) McG(xt,yt,xt+1,yt+1)

= D c t + 1 ( x t + 1 , y t + 1 ) D c t ( x t , y t ) × D c G ( x t + 1 , y t + 1 ) D t + 1 ( x t + 1 , y t + 1 ) D c t ( x t , y t ) D G ( x t , y t ) =\dfrac{D^{t+1}_c(x^{t+1},y^{t+1})}{D^t_c(x^t,y^t)}\times \dfrac{D^{G}_c(x^{t+1},y^{t+1})}{D^{t+1}(x^{t+1},y^{t+1})}\dfrac{D^{t}_c(x^{t},y^{t})}{D^{G}(x^t,y^t)} =Dct(xt,yt)Dct+1(xt+1,yt+1)×Dt+1(xt+1,yt+1)DcG(xt+1,yt+1)DG(xt,yt)Dct(xt,yt)

= T E C H × B P C =TECH\times BPC =TECH×BPC

其中,TECH 是通常的效率变化指标,BPG 是最佳实践差距,表明t+1期的基准技术相较于t期是接近还是远离了全局的基准⽣产技 术。当然也可以采用RD分解,分解规模变化。

4.指数计算代码与案例

malmq2 inputvars = outputvars  ,
选项:global 计算Golbal-Malmquist指数 
​            saving()   保存

案例数据展示,其中投入为l和k,期望产出为g,非期望产出为w,s,f

yearcitywsflgk
2018上海市291449100161631375.6631521.27.60E+07
2018南京市155341237535914462.611752.87.00E+07
2018无锡市206224024252929388.2118975.10E+07

先设置面板xtset

然后计算malmquist指数(l k为投入,g为产出),fare分解

RD分解:

GM指数计算

二、SBM模型

1.原理

带有非期望产出的SBM模型:
p h i ∗ = m i n 1 − 1 m ∑ i = 1 m ( S i o − X i o ) 1 + 1 s 1 + s 2 ( ∑ r 1 = 1 s 1 S r 1 o g y r 1 o g + ∑ r 2 = 1 s 2 S r 2 o b y r 2 o b ) phi^*=min\dfrac{1 - \dfrac{1}{m} \sum_{i=1}^m(\dfrac{S_{io}^-}{X_{io}})}{1+\dfrac{1}{s_1+s_2}(\sum_{r_1=1}^{s_1}\dfrac{S_{r_{1o}}^g}{y_{r_{1o}}^g}+\sum_{r_2=1}^{s_2}\dfrac{S_{r_{2o}}^b}{y_{r_{2o}}^b})} phi=min1+s1+s21(r1=1s1yr1ogSr1og+r2=1s2yr2obSr2ob)1m1i=1m(XioSio)
s . t X o = X λ + S o − ( 1 ) s.t\kern5em X_o=X\lambda +S_o^- \kern3em(1) s.tXo=Xλ+So(1)
y o g = Y g λ − S o g ( 2 ) \kern6em y_o^g=Y^g\lambda -S_o^g \kern3em(2) yog=YgλSog(2)
y o b = Y b λ + S o b ( 3 ) \kern6em y_o^b = Y^b\lambda + S_o^b \kern3em(3) yob=Ybλ+Sob(3)
S o − , S o g , S o b , λ > 0 ( 4 ) \kern6em S_o^-,S_o^g,S_o^b, \lambda >0 \kern2em(4) So,Sog,Sob,λ>0(4)
其中, ( X o , y o g , y o b ) (X_o,y^g_o,y^b_o) (Xo,yog,yob)分别表示每个决策单元的值, ( X λ , y g λ , y b λ ) (X\lambda,y^g\lambda,y^b\lambda) (Xλ,ygλ,ybλ)表示前沿面。
S o − , S o g , S o b S_o^-,S_o^g,S_o^b So,Sog,Sob表示松弛值,即投入或产出与前沿面的距离,也即投入比理想投入多的部分、期望产出比理想期望产出少的部分、非期望产出比理想非期望产出多的部分。 ϕ ∗ \phi^* ϕ即得出的效率。

2.stata代码实现

无非期望产出

sbmeff inputvars = desirable_outputvars , dmu(varname) 

有非期望产出

sbmeff inputvars = desirable_outputvars : undesirable_outputvars  , dmu(varname) 

TE表示效率

指数计算

** sbm_t
sbmeff l k = g:w s f,dmu(cit) time(year) sav(sbm_t,replace)
** sbm_g 全局前沿
sbmeff l k = g:w s f,dmu(cit)  sav(sbm_g,replace)
merge m:m cit  using sbm_g
rename TE TE_G
drop _merge
merge 1:1 cit year using sbm_t
drop _merge
xtset dmu year
tostring year, generate(time1)
gen lyear = l.year
tostring lyear, generate(time2)
gen time = time1 + "~" +time2
gen TFPCH = TE_G / l.TE_G
gen TECH = TE/l.TE
gen BPC = TFPCH / TECH
keep if TFPCH != .
list city time TFPCH TECH BPC

三、方向性距离函数(DDF)

1.原理

D → ( x , y , b ; g ) = m a x β \overrightarrow{D}(x,y,b;g)=max\beta D (x,y,b;g)=maxβ

s . t . ∑ n = 1 N z n x m n ≤ x m − β g x m , m = 1 , 2... , M s.t. \sum_{n=1}^Nz_nx_{mn} \leq x_m-\beta g_{xm},m=1,2...,M s.t.n=1Nznxmnxmβgxm,m=1,2...,M

∑ n = 1 N z n y s n ≥ y s + β g y s , s = 1 , 2... , S \kern4ex\sum_{n=1}^Nz_ny_{sn} \geq y_s+\beta g_{ys},s=1,2...,S n=1Nznysnys+βgys,s=1,2...,S

∑ n = 1 N z n b j n = b j − β g b j , j = 1 , 2... , J \kern4ex\sum_{n=1}^Nz_nb_{jn} =b_j-\beta g_{bj},j=1,2...,J n=1Nznbjn=bjβgbj,j=1,2...,J

z n ≥ 0 , β > 0 , n = 1 , 2... , N \kern4ex z_n\geq 0 ,\beta>0,n=1,2...,N zn0,β>0,n=1,2...,N

其中, g g g为投⼊和产出的缩放的⽅向向量, β \beta β为无效率值。

2.stata代码实现

ddfeff l k = g:w s f,dmu(cit) time(year) sav(ddf,)
merge 1:1 cit year using ddf
gen TE = 1-Dval
list year city  Dval TE

3.非径向DDF模型(NDDF)

N D → ( x , y , b ; g ) = m a x ( w m x β s y + w s t β s y + w j b β j b ) \overrightarrow{ND}(x,y,b;g)=max( w^x_m \beta_s^y+w_s^t\beta^y_s+w_j^b\beta_j^b) ND (x,y,b;g)=max(wmxβsy+wstβsy+wjbβjb)

s . t . ∑ n = 1 N z n x m n ≤ x m − β m s g x m , m = 1 , 2... , M s.t. \sum_{n=1}^Nz_nx_{mn} \leq x_m-\beta_m^s g_{xm},m=1,2...,M s.t.n=1Nznxmnxmβmsgxm,m=1,2...,M

∑ n = 1 N z n y s n ≥ y s + β s y g y s , s = 1 , 2... , S \kern4ex\sum_{n=1}^Nz_ny_{sn} \geq y_s+\beta_s^y g_{ys},s=1,2...,S n=1Nznysnys+βsygys,s=1,2...,S

∑ n = 1 N z n b j n = b j − β j b g b j , j = 1 , 2... , J \kern4ex\sum_{n=1}^Nz_nb_{jn} =b_j-\beta_j^b g_{bj},j=1,2...,J n=1Nznbjn=bjβjbgbj,j=1,2...,J

z n ≥ 0 , β > 0 , n = 1 , 2... , N \kern4ex z_n\geq 0 ,\beta>0,n=1,2...,N zn0,β>0,n=1,2...,N

NDDF模型对比DDF只是让投入产出的无效率系数变为不同。

NDDF模型代码实现

由于结果给出了所有方向的 β \beta β,也可以按照自己的方法计算TE(自己定义的公式).比如:

T E = 1 − 0.2 ( B _ l + B _ k + B _ w + B _ s + B _ f ) 1 + B g TE=\dfrac{1-0.2(B\_l +B\_k+B\_w+B\_s+B\_f)}{1+B_g} TE=1+Bg10.2(B_l+B_k+B_w+B_s+B_f)

其内涵为每种因素的平均效率。

3.GML指数

计算完效率之后可以计算效率的变化率Global-Malmquist-Luenberger指数。

由于已被证明:

D → ( x , y , b ; g ) = 1 1 + D ( x , y , b ) \overrightarrow{D}(x,y,b;g)=\dfrac{1}{1+D(x,y,b)} D (x,y,b;g)=1+D(x,y,b)1

因此有Malmquist-Luenberger指数:

M L = D t ( x t + 1 , y t + 1 , b t + 1 ; g t + 1 ) × D t + 1 ( x t + 1 , y t + 1 , b t + 1 ; g t + 1 ) D t ( x t , y t , b t ; g t ) × D t + 1 ( x t , y t , b t ; g t ) ML=\dfrac{{D^t}(x^{t+1},y^{t+1},b^{t+1};g^{t+1})\times{D^{t+1}}(x^{t+1},y^{t+1},b^{t+1};g^{t+1})}{{D^t}(x^t,y^t,b^t;g^t)\times{D^{t+1}}(x^{t},y^t,b^t;g^t)} ML=Dt(xt,yt,bt;gt)×Dt+1(xt,yt,bt;gt)Dt(xt+1,yt+1,bt+1;gt+1)×Dt+1(xt+1,yt+1,bt+1;gt+1)

= [ 1 + D t → ( x t , y t , b t ) 1 + D t → ( x t + 1 , y t + 1 , b t + 1 ) × 1 + D t + 1 → ( x t , y t , b t ) 1 + D t + 1 → ( x t + 1 , y t + 1 , b t + 1 ) ] 0.5 \kern4ex =[\dfrac{1 + \overrightarrow{D^t}(x^t,y^t,b^t)}{1+\overrightarrow{D^{t}}(x^{t+1},y^{t+1},b^{t+1})}\times \dfrac{1+ \overrightarrow{D^{t+1}}(x^t,y^t,b^t)}{1+\overrightarrow{D^{t+1}}(x^{t+1},y^{t+1},b^{t+1})}]^{0.5} =[1+Dt (xt+1,yt+1,bt+1)1+Dt (xt,yt,bt)×1+Dt+1 (xt+1,yt+1,bt+1)1+Dt+1 (xt,yt,bt)]0.5

和GML指数

G M L = D G ( x t + 1 , y t + 1 , b t + 1 ) D G ( x t , y t , b t ) = 1 + D G → ( x t , y t , b t ) 1 + D G → ( x t + 1 , y t + 1 , b t + 1 ) GML = \dfrac{D^G(x^{t+1},y^{t+1},b^{t+1})}{D^G(x^t,y^t,b^t)} = \dfrac{1+\overrightarrow{D^G}(x^{t},y^{t},b^{t})}{1+\overrightarrow{D^G}(x^{t+1},y^{t+1},b^{t+1})} GML=DG(xt,yt,bt)DG(xt+1,yt+1,bt+1)=1+DG (xt+1,yt+1,bt+1)1+DG (xt,yt,bt)

= 1 + D t → ( x t , y t , b t ) 1 + D + 1 → ( x t + 1 , y t + 1 , b t + 1 ) × ( 1 + D G → ( x t , y t , b t ) ) / ( 1 + D t → ( x t , y t , b t ) ) ( 1 + D G → ( x t + 1 , y t + 1 , b t + 1 ) ) / ( 1 + D + 1 → ( x t + 1 , y t + 1 , b t + 1 ) ) \kern5ex = \dfrac{1+\overrightarrow{D^t}(x^{t},y^{t},b^{t})}{1+\overrightarrow{D^+1}(x^{t+1},y^{t+1},b^{t+1})} \times \dfrac{(1+\overrightarrow{D^G}(x^{t},y^{t},b^{t}) )/(1+\overrightarrow{D^t}(x^{t},y^{t},b^{t}))}{(1+\overrightarrow{D^G}(x^{t+1},y^{t+1},b^{t+1}))/ (1+\overrightarrow{D^+1}(x^{t+1},y^{t+1},b^{t+1}))} =1+D+1 (xt+1,yt+1,bt+1)1+Dt (xt,yt,bt)×(1+DG (xt+1,yt+1,bt+1))/(1+D+1 (xt+1,yt+1,bt+1))(1+DG (xt,yt,bt))/(1+Dt (xt,yt,bt))

= T E C H × B P C \kern5ex = TECH \times BPC =TECH×BPC

4.指数测算

ML指数


存在大量缺失值,使用gml指数

四、总结

上述包含了 dea、malmq2、ddfeff等命令,可能需要高版本stata,stata16最好。如果缺少了命令,可通过 ssc install XX (XX为命令名称)下载,网络不好可能下载失败。也可使用其他人下载好的命令,推荐 连玉君老师的plus文件。
文中相关数据和资源:
链接:https://pan.baidu.com/s/15wMpDovYiqG-LI74Z_NhPQ
提取码:em4g
最后,在肝论文的小伙伴,都帮你们到这了,不点个大大的赞吗!!

有关DEA各种模型原理及stata代码实现的更多相关文章

  1. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  2. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  3. ruby-on-rails - Rails 源代码 : initialize hash in a weird way? - 2

    在rails源中:https://github.com/rails/rails/blob/master/activesupport/lib/active_support/lazy_load_hooks.rb可以看到以下内容@load_hooks=Hash.new{|h,k|h[k]=[]}在IRB中,它只是初始化一个空哈希。和做有什么区别@load_hooks=Hash.new 最佳答案 查看rubydocumentationforHashnew→new_hashclicktotogglesourcenew(obj)→new_has

  4. ruby-on-rails - Rails - 一个 View 中的多个模型 - 2

    我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何

  5. ruby-on-rails - 在混合/模块中覆盖模型的属性访问器 - 2

    我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah

  6. ruby-on-rails - 如何验证非模型(甚至非对象)字段 - 2

    我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss

  7. ruby-on-rails - form_for 中不在模型中的自定义字段 - 2

    我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢

  8. ruby-on-rails - 如何将验证与模型分开 - 2

    我有一些非常大的模型,我必须将它们迁移到最新版本的Rails。这些模型有相当多的验证(User有大约50个验证)。是否可以将所有这些验证移动到另一个文件中?说app/models/validations/user_validations.rb。如果可以,有人可以提供示例吗? 最佳答案 您可以为此使用关注点:#app/models/validations/user_validations.rbrequire'active_support/concern'moduleUserValidationsextendActiveSupport:

  9. ruby - 如何根据特征实现 FactoryGirl 的条件行为 - 2

    我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden

  10. ruby-on-rails - Rails 模型——非持久类成员或属性? - 2

    对于Rails模型,是否可以/建议让一个类的成员不持久保存到数据库中?我想将用户最后选择的类型存储在session变量中。由于我无法从我的模型中设置session变量,我想将值存储在一个“虚拟”类成员中,该成员只是将值传递回Controller。你能有这样的类(class)成员吗? 最佳答案 将非持久属性添加到Rails模型就像任何其他Ruby类一样:classUser扩展解释:在Ruby中,所有实例变量都是私有(private)的,不需要在赋值前定义。attr_accessor创建一个setter和getter方法:classUs

随机推荐