显示一个相应的按钮,它是 link in rails
display a corresponding button and it's link in rails
我在 Rails 5 ERB 中有一个结构化布局,它为通过 json 数据文件作为本地传递的每个数据呈现部分数据,但它们每个都有 1 或 2里面有对应的 links 的按钮,我还想为它对应的每个 link 更改按钮的标题。我已经实现了它,但我觉得将所有逻辑都放在视图中有点不吸引人,有没有一种方法可以将它放在一个助手中,该助手为每个 link 显示一个特定的按钮json 文件?
我基本上想实现这个
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 。对于标题,您可以将参数传递给助手并根据需要进行更改。助手也可以更有活力。
我在 Rails 5 ERB 中有一个结构化布局,它为通过 json 数据文件作为本地传递的每个数据呈现部分数据,但它们每个都有 1 或 2里面有对应的 links 的按钮,我还想为它对应的每个 link 更改按钮的标题。我已经实现了它,但我觉得将所有逻辑都放在视图中有点不吸引人,有没有一种方法可以将它放在一个助手中,该助手为每个 link 显示一个特定的按钮json 文件?
我基本上想实现这个
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 。对于标题,您可以将参数传递给助手并根据需要进行更改。助手也可以更有活力。