0

モデルの1つに、呼び出されたときにTwitter gemを使用してツイートをフェッチし、その一部を保存するメソッドがあります。Webインターフェイスからアプリへのアクションをトリガーできるようにしたいと思います。これを達成するためのRailsの方法は何ですか?ビューからモデルメソッドを呼び出さないという言及をいくつか見たので、代わりにコントローラー内からこれを行う必要がありますか?

私の方法(関連するモデルはスポンサーとスポンサーツイートです(したがって、私のモデル名は、宝石からのツイートと競合しません):

def create_tweet                                                                  
    tweet = Twitter.user_timeline(self.twitter).first                               
    self.sponsortweets.create!(content: tweet.text,                                 
                               tweet_id: tweet.id,                                  
                               tweet_created_at: tweet.created_at,                  
                               profile_image_url: tweet.user.profile_image_url,     
                               from_user: tweet.from_user,)                         
end

編集:

tweetスポンサーコントローラーでメソッドを作成しました。

def tweet
  @sponsor = Sponsor.find(params[:id])
  @sponsor.create_tweet
end

そして、私のconfig/routes.rbに以下を追加しましたmatch 'tweet', to: 'sponsors#tweet', via: :post

私の見解では次のコードと同様に(私はhamlを使用しています):

= button_to :tweet, tweet_path(@sponsor)

ただし、ボタンをクリックすると、次のエラーが発生します。

Couldn't find Sponsor without an ID

4

2 に答える 2

1

ビューには、コントローラーの特定のルートに投稿するボタンが必要です。そのコントローラーは、モデルのメソッドを呼び出します。アプリが実際にどのように見えるかわからない場合は、次の例をご覧ください。

EDITにはより良い例が含まれています

ビュー(スポンサービューであると想定):

<%= button_to :submit, tweet_path %>

コントローラ:

def tweet
    Sponsor.create_tweet
end

また、メソッドを次のようにクラスメソッドに変更することを除いて、モデルは同じままです。

def self.create_tweet
    ...your code here...
end

これは特定のスポンサーに関連付けられていないように見えるため、クラスメソッドを使用します。したがって、メソッドを呼び出すためにクラスのインスタンスは必要ありません。そうは言っても、ある時点でクラスのインスタンスが必要になるようです...

于 2012-10-26T22:21:20.673 に答える
0

コントローラーを一斉にバイパスする方法があるのではないかと思っているので、他の人の答えを聞いてみたいと思います。

ただし、これについての私の見解は、RailsはMVC(Model View Controller)フレームワークであるため、検討していることを達成するためのRailsの方法は、おそらくアクションを通常どおりに処理することだと思います。コントローラを介してモデルに。

ボタンやリンク、またはサーバー側のTwitter処理を開始するAJAXがあると仮定して正しい場合は、そのURLのルーティングを設定して、コントローラーのアクションメソッドをポイントします。モデルメソッドmyModel.create_tweet

于 2012-10-26T22:20:20.943 に答える