0

我的一个模型中有一个方法,当被调用时,它使用 twitter gem 获取一条推文并存储它的某些部分。我希望能够从 Web 界面触发该操作到我的应用程序。什么是 Rails 方式来实现这一点?我已经看到一些关于不从视图调用模型方法的引用,所以我应该以某种方式从控制器中执行此操作吗?

我的方法(相关模型是 Sponsor 和 Sponsortweet(所以我的模型名称不会与 Tweet 冲突,来自 gem):

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

您的视图应该有一个发布到控制器中特定路由的按钮。然后,该控制器将调用模型中的方法。不知道您的应用程序实际上是什么样子,这里有一个示例:

编辑包括更好的例子

视图(假设它是赞助商视图):

<%= 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(模型视图控制器)框架,我认为 Rails 完成您正在考虑的事情的方式可能是简单地正常处理操作;通过控制器模型

如果我正确地假设您有一个按钮或链接,或者可能是一些 AJAX,它正在启动服务器端 Twitter 处理,那么我将为该 URL 设置您的路由以指向一个控制器操作方法,然后调用你的模型方法myModel.create_tweet

于 2012-10-26T22:20:20.943 回答