试图创建新的tweets以显示在我的索引中,但我不想离开页面。我的应用程序想要的功能是跟踪来自tweetstream的tweet s,并自动将该信息传递到tweet对象并保存到db。
控制器:

class TweetsController < ApplicationController

  TWITTER_COMSUMER_KEY = "GfqdzJKb5kIyEnYlQuNGlg"
  TWITTER_CONSUMER_SECRET = "A3Fe0IvDbhlKgowCVmV1WVLlcdYgQ8w9clrDSegCQ"
  TWITTER_OATH_TOKEN = "34012133-caUYq3eiNC7Z9L9KvTgG51VgyctqVxkXP0tKIXDk0"
  TWITTER_OATH_TOKEN_SECRET = "DSLA3F8BPssyEeEP2wZgQ1OJRL5kIVPZfON4GYZFw"

  TweetStream.configure do |config|
    config.consumer_key = TWITTER_COMSUMER_KEY
    config.consumer_secret = TWITTER_CONSUMER_SECRET
    config.oauth_token = TWITTER_OATH_TOKEN
    config.oauth_token_secret = TWITTER_OATH_TOKEN_SECRET
  end

  def index
    @tweets = Tweet.all
  end

  def new
    @tweet = Tweet.new
  end

  def create
    TweetStream.track('bed', 'morning', 'breakfast') do |status|

      temp = status.text
      if(temp.include? "http")
         @tweet = Tweet.new(status.text)
         if @tweet.save
         else
           render "new"
         end
      end
    end
  end

  def show

  end
end

Index.html.erb索引
<h1>Tweet Tracker</h1>

<% @tweets.each do |tweet| %>
    <p><%= tweet.content %></p>
    <hr />
<% end %>

最佳答案

这是对restful资源结构(index/show/create/edit/destroy)的一种有趣的方法,因为我们使用一个自动跟踪程序来创建,而不是任何用户输入。问题是,您的控制器代码只有在POST请求访问时才会运行(除非您已经使用routes.rb使其对其他内容做出响应)。
在我看来,最干净的解决方案是编写一个咖啡脚本,定期向控制器发送数据并显示结果。
/app/assets/javascripts/tweets.js.coffee软件

$ ->
    setInterval ->
      $.post("/tweets", "", (html)->
            $("#tweets").append html)
     , 1000

/app/views/tweets/create.html.erb
<p><%= @tweet.content %></p>
<br/>

要使其正常工作,我们需要用id=“tweets”将tweets区域包装成div:
/app/views/tweets/index.html.erb
<h1>Tweet Tracker</h1>

<div id="tweets">
<% @tweets.each do |tweet| %>
   <p><%= tweet.content %></p>
   <br/>
<% end %>
</div>

您还需要用render "new"替换控制器的create方法中的return。这样,当保存到数据库失败时,将不会呈现任何内容,并且所有内容都将继续,不会出现错误。

关于ruby-on-rails - Ruby-on-Rails:如何在不离开索引的情况下访问create Action ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15400307/

10-11 17:35