调用'结构'以使用rails保存在postgres中

时间:2015-08-03 19:01:11

标签: ruby-on-rails ruby

我有一个'发布'数据结构,我在postgres中的表名是'publication'。我从流媒体中得到一条推文并根据类TweetFetcher解析它。如何调用发布控制器将其保存到数据库? PublicationController具有标准的scrum功能(new,create,show,edit ...),其中create为:

def create
  @publication = Publications.new(params[:publication])
  if @publication.save
        redirect_to :action => 'list'
  else
        @subjects = Subject.find(:all)
        render :action => 'new'
  end
end

我的推特代码是

class TweetFetcher
    def saveTweet(parsedTweet)

        pT = JSON.parse(parsedTweet)

        #save here. like this?
        #PublicationController.create(parsedTweet)

    end

end

1 个答案:

答案 0 :(得分:0)

在这种情况下你不应该使用你的控制器,而是你可以像这样建立你的记录:

class TweetFetcher
    def saveTweet(parsedTweet)

        pT = JSON.parse(parsedTweet)

        publication = Publications.new
        publication.sample_field = pT.sample_field
        ... # set additional attributes
        publication.save

    end

end

此外,这里有一些与您的问题没有直接关系的建议/信息,但是您应该知道的事情:

  1. 模型的类名应该是单数,因此应该是Publications而不是Publication

  2. 方法和变量名称应该是蛇形而不是驼峰形式(即save_tweet而不是saveTweetparsed_tweet而不是parsedTweet)。

  3. 首选新的哈希语法,除非您使用的是1.9以下的Ruby版本。这看起来像{ key: value }而不是{ key => value }

  4. Ruby代码的缩进通常为2个空格。

  5. 话虽这么说,我会改变你的代码:

    <强> PublicationsController#创建

    def create
      @publication = Publication.new(params[:publication])
    
      if @publication.save
        redirect_to action: 'list'
      else
        @subjects = Subject.find(:all)
        render action: 'new'
      end
    end
    

    <强> TweeFetcher

    class TweetFetcher
      def save_tweet(tweet)
        parsed_tweet = JSON.parse(tweet)
    
        publication = Publication.new
        publication.sample_field = parsed_tweet.sample_field
        ... # set additional attributes
        publication.save
      end
    end