首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >重构Rails 3视图-将逻辑移动到<model>_helper

重构Rails 3视图-将逻辑移动到<model>_helper
EN

Stack Overflow用户
提问于 2010-12-13 15:13:28
回答 2查看 588关注 0票数 0

我想将下面的内容从我的视图移到模型的相关助手中:

代码语言:javascript
运行
复制
<%= link_to_unless params[:aged]=='0', "0", jobs_path(:aged => '0', :sort=>params[:sort],:dir=>params[:dir],:fav=>params[:fav]) %> |
<%= link_to_unless params[:aged]=='30', "30", jobs_path(:aged => '30', :sort=>params[:sort],:dir=>params[:dir],:fav=>params[:fav]) %> |
<%= link_to_unless params[:aged]=='60', "60", jobs_path(:aged => '60', :sort=>params[:sort],:dir=>params[:dir],:fav=>params[:fav]) %> |
<%= link_to_unless params[:aged]=='90', "90", jobs_path(:aged => '90', :sort=>params[:sort],:dir=>params[:dir],:fav=>params[:fav]) %>

我尝试过这样做,但它会导致一个意外的标识符错误(显然,我需要将link_to_unless的结果连接到“\”):

代码语言:javascript
运行
复制
link_to_unless params[:aged]=='0', "0", users_path(:aged=>'0',:sort=>params[:sort],:dir=>params[:dir],:fav=>params[:fav]) |
link_to_unless params[:aged]=='30', "30", users_path(:aged=>'30',:sort=>params[:sort],:dir=>params[:dir],:fav=>params[:fav]) |
link_to_unless params[:aged]=='60', "60", users_path(:aged=>'60',:sort=>params[:sort],:dir=>params[:dir],:fav=>params[:fav]) |
link_to_unless params[:aged]=='90', "90", users_path(:aged=>'90',:sort=>params[:sort],:dir=>params[:dir],:fav=>params[:fav])

我似乎需要将这些帮助方法的结果插入到HTML流中,但我不确定最佳的方法。

既然Rails 3一直都包含所有的助手(helpers : all ),那么是否有一种方法可以指示模型的视图只使用与模型关联的助手?此时,我正在将模型的名称添加到函数的名称中--例如,'jobs_sorted_column‘。

编辑**

重构

jobs_helper:

代码语言:javascript
运行
复制
  def posted_filter(bucket)

    link_to_unless params[:posted]==bucket, bucket, jobs_path(:posted =>bucket, :starting=>params[:starting],:sort=>params[:sort],:dir=>params[:dir])

  end

意见:

代码语言:javascript
运行
复制
[ <% ['0','30','60','90'].each do |bucket| %>
    <%= posted_filter(bucket) %> |
<% end %> ]

问题:

  • 结果输出看起来像是0\ 30 \ 60 \ 90 \是否有一个简单的修正来删除第四个‘\’?
  • 似乎有一种更优雅的方法可以将params传递到路由,包括一个“重载”值(在我的示例中是:posted=>bucket)。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-19 21:33:14

你可以做得更好:

代码语言:javascript
运行
复制
def posted_filters(*args)
  args.collect { |bucket|
    link_to_unless(params[:posted]==bucket, bucket, jobs_path(:posted =>bucket, :starting=>params[:starting],:sort=>params[:sort],:dir=>params[:dir]))
  }.join(' | ').html_safe
end

在您看来,代码:

代码语言:javascript
运行
复制
[ <%= posted_filters(0, 30, 60, 90) %> ]
票数 1
EN

Stack Overflow用户

发布于 2010-12-19 20:52:42

尝试使用collectjoin,如下所示:

代码语言:javascript
运行
复制
<%= ['0','30','60','90'].collect{ |x| "#{posted_filter(x)}" }.join(' | ') %>

请参阅:数组#收集

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

https://stackoverflow.com/questions/4430263

复制
相关文章

相似问题

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