2016-06-02 3 views
0

を更新するための一般的な方法。そして、私はアプリのどこからでもメソッドを呼び出すことができるはずです。自分のアプリケーションのコントローラで(私はセキュリティ上の欠陥について理解し、その上..しかし、私はとにかくそれを行うように頼まれた)は、私はこれを達成するためにどのように...これは動作しませんもちろんRailsの私はレールに新しいですし、私は指定された値で、特定のデータベースフィールドを更新する一般的な方法を記述するためのタスクを持っているデータベースフィールド

def update_my_model_status(model,id,field, value) 
    @model = model.find(id) 
    @model.update(field: value) 
    end 

を試してみましたか?これを行う正しい方法は何ですか?メソッドへの引数としてモデルを渡す方法が可能ならば?あなたがRailsのを使用しない理由のRailsを使用している場合

def update_my_model_status(model,id,field, value) 
    @model_var = model.capitalize.constantize.find(id) 
    @model_var.update_attributes(field: value) 
    end 
+0

...さんは完全に罰金Railsの方法の周りの任意のラッパーを書くわけにはいきません。 [security ... security ... blah blah]。しかし、あなたが得ているエラーは何ですか? –

+0

@ manu29.d dumb eyy?私の上司がこれをするように頼んだ..それを助けることができない –

+0

@TonyVincentあなたは私の答えを試しましたか? – HashRocket

答えて

1

+0

これはひどい質問ですが、私は自分自身を助けることができませんでした。情報が不足しているようです。この欲望を職場で動機づけているかもしれないと想像するのは難しいですが、それは生産コードに入れるものよりも学問的な運動に適しているようです。これが本当にあなたの上司からの要請であれば、代替雇用を探すことを検討したいかもしれません - このアプリはほとんど確実に維持できない災害になるでしょう。 –

+0

私たちはイベント、タスク、トドゥーモデルと言っています。私はtodoが更新されている間、イベントの状態を更新する必要があります。私は、同じ機能を必要とするかもしれない非常に多くの無関係なモデルが存在すると言われています(私はその点を理解していないし、私の懸念を引き上げようとしました。私はここで学びたいと思っています。 –

0

代わりにちょうどあなたが使用する必要がありますupdateupdate_attributesを使用する:

def update_my_model_status(model,id,field, value) 
    @model_var = model.find(id) 
    @model.update_attributes(field: value) 
    end 

http://api.rubyonrails.org/classes/ActiveRecord/Persistence.html#method-i-update

+0

update_attributesはモデルに対して検証を実行しません。そして、私はどのメソッドを使うべきか、それはアプリケーション全体を通してアクセシブルにして、モデルを引数として渡すことについての正しい方法ではない –

1

はこれを試してみてください?

update_all比較:

MyModel.where(id: 1).update_all(banned: true)

または多分update_attribute

my_model.update_attribute(:banned, true)

へ:

update_my_model_status(MyModel, 1, :banned, true)

最初の2つの方法は、短くても最後のものよりもかなり表現力があることに注意してください。何が起こっているのかがはっきりしています。それだけでなく、通りの向こうのどのRails開発者にとってもすぐに馴染みやすいものですが、カスタムのものは学習曲線があります。これは、不要なメソッドの追加されたコードと組み合わされて、アプリケーションの保守コストを増加させます。さらに、Railsメソッドは十分にテストされ、文書化されています。最後に、Railsメソッドの方が優れています。たとえば、プロトタイプは属性の検証を単純に使用しますが、チェックはしません(予期しない動作が発生する可能性があります)。これは、カスタムメソッドを書くために細かいですが、私はあなたのモデルを更新するこの方法に対して助言する

関連する問題