显示一个相应的按钮,它是 link in rails

display a corresponding button and it's link in rails

我在 Rails 5 ERB 中有一个结构化布局,它为通过 json 数据文件作为本地传递的每个数据呈现部分数据,但它们每个都有 1 或 2里面有对应的 links 的按钮,我还想为它对应的每个 link 更改按钮的标题。我已经实现了它,但我觉得将所有逻辑都放在视图中有点不吸引人,有没有一种方法可以将它放在一个助手中,该助手为每个 link 显示一个特定的按钮json 文件?

我基本上想实现这个

Wireframe

data.json

[{
  "github": "https://github.com/",
  "heroku": "https://heroku.com/",
  "button": [{"github": "github", "heroku": "heroku", "codepen": "codepen", "behance": "behance"}]
},
{
  "github": "https://github.com/",
  "heroku": "https://heroku.com/",
  "button": [{"github": "github", "heroku": "heroku", "codepen": "codepen", "behance": "behance"}]
},
{
  "codepen": "https://codepen.com/",
  "button": [{"github": "github", "heroku": "heroku", "codepen": "codepen", "behance": "behance"}]
},
{
  "codepen": "https://behance.com",
  "button": [{"github": "github", "heroku": "heroku", "codepen": "codepen", "behance": "behance"}]
}]


application_helper.rb

  def portfolio_section(title, &block)
    render(:partial => 'editable-sections/portfolio-section', 
    :locals => {:title => title, :block => block})
  end


index.html.erb controller/template

<%= portfolio_section('Portfolio') do %>
  <!-- nested partials -->
  <!--  Send data from our json file and pass in local variable for it to be interpolated  -->
  <% @data.each do |data| %>
      <%= render(:partial => 'editable-sections/panels/panel', :locals => {:data => data})%>
  <% end %>
<% end %>

_panel.html.erb/部分

  <!-- _panel.html.erb -->
   <div class="btn-position">
     <% if data["github"] && ["heroku"].present?%>
       <a href="<%= data["github"] %>" target="_blank" class="btn btn-sharp">
          <%= data["button"][0]["github"]%>
       </a>
       <a href="<%= data["heroku"] %>" target="_blank" class="btn btn-sharp">
         <%=data["button"][0]["heroku"] %>
       </a>
       <% elsif data["codepen"].present?%>
       <a href="<%= data["codepen"] %>" target="_blank" class="btn btn-sharp">
          <%= data["button"][0]["codepen"]%>
       </a>
       <% elsif data["behance"].present?%>
       <a href="<%= data["behance"] %>" target="_blank" class="btn btn-sharp">
          <%= data["button"][0]["behance"]%>
       </a>
     <% end %>
   </div>

将登录提取到您的帮助器中,并传递和呈现帮助器方法。就像你可以像下面这样提取第一个条件。

def make github_link data
   link_to(data["github"] , data["button"][0]["github"] , class: "btn btn-sharp", target: '_blank') if data["github"] && ["heroku"].present?
end

并将此方法用于您的部分。那应该清理视图。如果您想走得更远,可以使用装饰器 https://github.com/drapergem/draper 。对于标题,您可以将参数传递给助手并根据需要进行更改。助手也可以更有活力。