我目前在我看来有这个逻辑
<% tools_count = @job.tools.count - 1 %>
<% count = 0 %>
<% @job.tools.each do |u|%>
<%= u.name %>
<% if count != tools_count %>
<% count += 1 %>
<%= "," %>
<%end%>
<% end %>
除非它是列表的末尾,否则它只会遍历一些用户关系并放入a。
我的问题:这种逻辑看起来非常混乱,堵塞了我的观点我知道必须有一个更好的方法,通过将它移动到控制器或模型,有没有人知道正确的方法来做这种逻辑?
答案 0 :(得分:3)
您可以将这样的方法添加到Job
模型中:
def tool_names
tools.map(&:name).join(',')
end
并在您的视图中使用它:
<%= @job.tool_names %>
答案 1 :(得分:2)
有几种方法可以避免在视图层中放置这种逻辑:
这适用于简单的逻辑和简单的项目。但是,如果您想使用type MyPostBody struct {
SomeVar string `json:"someVar"`
}
pb := &MyPostBody{SomeVar: "someValue"}
jsonStr, err := json.Marshal(pb)
if err != nil {
log.Fatalf("could not marshal JSON: %s", err)
}
req, err := http.NewRequest("POST", APIURL, bytes.NewBuffer(jsonStr))
中的某些帮助,例如ActionView::Helpers
或jobs_path
,那么模型就不适合它。
number_to_currency
通常,您可以在助手中放置与视图层相关的任何辅助方法。例如,共享用于构建视图组件的常用方法。
JobHelpers
gem:http://johnotander.com/rails/2014/03/07/decorators-on-rails/ 答案 2 :(得分:0)
您可以在一行中执行此操作,例如
<%= @job.tools.map(&:name).join(',') %>