首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用助手/服务的rails4及其放置位置

使用助手/服务的rails4及其放置位置
EN

Stack Overflow用户
提问于 2016-06-11 13:15:06
回答 1查看 44关注 0票数 0

我创建了这个类,用于根据在twitter上共享的产品属性的长度来组装文本。

我的问题:

  • 这是否解决问题的好办法?如果不是这个那又怎样?(我应该把类和方法放在哪里,如何调用它等等)
  • 如果这是一个好方法,那么应该改变什么呢?例如,我觉得def twitter_share_text不应该在product.rb中。

show.html.erb

代码语言:javascript
复制
<a class="twitter-share" data-behavior="twitter-share" 
                         data-twittertext="<%= @product.twitter_share_text %>" 
                         data-twitterurl="<%= product_url(@product) %>" 
                         data-twitteranchor>
  <i class="fa fa-lg fa-twitter"></i>
</a>

product.rb

代码语言:javascript
复制
def twitter_share_text
  TwitterProductShare.new(self).return_text
end

app/services/twitter_product_share.rb

代码语言:javascript
复制
class TwitterProductShare
  URL_LENGTH = 23 #defined by twitter API
  SPACE_LENGTH = 1
  TWITTER_MAX = 140
  attr_reader :name, :oneliner

  def initialize(product)
    @name = product.name
    @oneliner = product.oneliner
  end

  def return_text
    if full_length <= TWITTER_MAX
      return basic_text
    else
      return basic_text[0...-(difference + text_end.length)] + text_end
    end
  end

  private

    def basic_text
      "#{name}: #{oneliner}"
    end

    def difference
      full_length - TWITTER_MAX
    end

    def full_length
      basic_text.length + SPACE_LENGTH + URL_LENGTH
    end

    def text_end
      "..."
    end
end
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-11 13:30:20

我认为这样的代码属于视图助手:

代码语言:javascript
复制
# in app/helpers/product_helper.rb
def twitter_share_link(product)
  data = {
    behavior:      'twitter-share',
    twittertext:   TwitterProductShare.new(product).return_text,
    twitterurl:    product_url(product),
    twitteranchor: 'twitteranchor'
  }

  link_to(class: 'twitter-share', data: data) do
    tag(:i, class: 'fa fa-lg fa-twitter')
  end
end

在您看来,可以这样使用这个助手:

代码语言:javascript
复制
<%= twitter_share_link(@product) %>

或者您甚至可以从data返回整个TwitterProductShare哈希。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37764168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档