2017-10-09 4 views
0

私はrgroveから私のモデルでサニタイズメソッドを持っているが、私は私のマイクロポストにsanitized_gif_urlを呼び出したい珠玉モデルインスタンスのモデルのビューからの呼び出しメソッド、rails?

Micropost 
    belongs_to :user 

    def sanitized_gif_url 
    self.gif_url = Sanitize.fragment(micropost.gif_url, elements etc to sanitize here).html_safe 
    end 

をサニタイズ私は本当にインスタンスを理解して見るが、私はこのコードを実行するとき、私はundefined local variable or method sanitized_gif_url' for #<#<Class:0xb886cf0>

を取得/ classメソッドは非常に漠然としていますが、私は私の見解では、マイクロポストのインスタンスに対してメソッドを呼びたいと思っています。私はself.gif_urlをdbの元のオブジェクトを参照して呼び出すと、インスタンス上で自分のメソッドを実行しているときに、すでにそれを行っていると思いました。

**編集:gif_urlは、消したい属性です。あなたはそれがMicropostクラスのインスタンスで呼び出さなければならないことを意味し、インスタンスメソッドとしてあなたsanitized_gif_urlを書かれている

ビューコード

_micropost.html.erb

.... 
<%= sanitized_gif_url %> (I know this doesnt look right) 
.... 
+1

ビューにあるコードを追加してください。 – Eoghain

+0

が追加されました。その非常にシンプルな、私はその行にエラーが発生しています:) –

答えて

1

メソッドをオブジェクトに明示的に渡すことなく、selfに渡されます。これはビュー内でビューインスタンスを意味します。そのため、Micropostインスタンスにメソッドを渡す必要があります(例えば、@micropost.sanitized_gif_url)。そのメソッドの定義は、あまりにも多少の誤差があります

##Micropost.rb 
##micropost in micropost.gif_url is undefined. you can use self.gif_url or just gif_url, as self is implied. 
##I'd remove "self.gif_url =" too unless this is used in a callback to sanitize url before saving 
    def sanitized_gif_url 
    self.gif_url = Sanitize.fragment(gif_url, elements etc to sanitize here).html_safe 
    end 

しかし、これの目的は、私があなたの代わりにMicropostための方法のビューヘルパーを作成することをお勧めしたい、ビュー内の消毒方法を示すことである場合。

この利点は、モデルとビューに対する懸念の分離です。また、Micropostの特定の実装に#sanitized_gif_urlの依存関係を排除しました。したがって、このメソッドは、他のURLまたはあなたが浄化したいものを持つモデルに使うことができます。

+0

これは意味をなさないようですが、これを正しいとマークします。私は最初の例を使っていましたが、私はすでにそれを理解していましたが、2番目の例もうまくいきました:) –

1

あなたが話しているビューのコントローラーは、ビューにアクセスするためのインスタンス変数としてMicropostインスタンスを設定する必要があります。 @micropost = Micropost.find(params[:id])ような何かは、あなたがこのように持っているもの、変更ビューで次に

(ビューで作業しているMicropostの特定のインスタンスを取得する):インスタンスメソッドは、1つのインスタンスで呼び出され <%= @micropost.sanitized_gif_url %>

クラス。クラスメソッドは、クラス自体に対して呼び出されます。

+0

ありがとう、私は多くのことを理解しようとすると、この1つの助けが必要でした。 –

関連する問題