我是铁杆新手。在我的观点中,我有这个块afrikaans.html.erb
<% @afrikaans.each do |course| %>
<div class="course">
<h3 class="course-name"><%= link_to course.name, course.url %></h3>
<% if I18n.locale == I18n.default_locale %>
<p class="course-description_en"><%= course.description_en %></p>
<% else %>
<p class="course-description_se"><%= course.description_se %></p>
<% end %>
<% if course.youtube_url.blank? == false %>
<p><%= raw ApplicationHelper.youtube_embed(course.youtube_url) %></p>
<% end %>
<% if course.language_id == 1 %>
<p> <%= image_tag("eng.png", :alt => "England", :class =>"round") %></p>
<% else %>
<p> <%= image_tag("swe.png", :alt => "Sweden", :class =>"round") %></p>
<% end %>
<% if ApplicationHelper.active_link?(course.url) == false %>
<td><%= I18n.t('home.broken_link') %></td>
<% end %>
<p><%= course.nbr_of_votes %> <%= I18n.t('home.votes') %></p>
</tr>
<% end %>
我还有另一个文件swahili.html.erb具有相同的结构。我想实现类似的东西
afrikaans.html.erb
<% @afrikaans.each do |course| %>
<%= render 'shared/partial' %>
<% end %>
所以我也可以
swahili.html.erb
<% @swahili.each do |course| %>
<%= render 'shared/partial' %>
<% end %>
部分将包含块的一部分。我试过这个,但它不起作用。我的问题是这在轨道中甚至是可能的,如果是这样的话可能是什么问题。如果不可能,我有哪些选项可以避免重复,因为这两个文件具有相同的结构?
更新即可。这一个为我解决了。我只需要在块上添加:course => course
,以便我的视图变成类似
<% @afrikaans.each do |course| %>
<%= render 'shared/course_body', :course => course %>
<% end %>
当然,我没有将我的部分“部分”命名。这只是一个问题。感谢@Alexander Panasyuk的回答。
答案 0 :(得分:2)
只需在 app / views 路径中创建共享目录即可。在共享中创建文件 _partial.html.erb :
<div class="course">
<h3 class="course-name"><%= link_to course.name, course.url %></h3>
<% if I18n.locale == I18n.default_locale %>
<p class="course-description_en"><%= course.description_en %></p>
<% else %>
<p class="course-description_se"><%= course.description_se %></p>
<% end %>
<% if course.youtube_url.blank? == false %>
<p><%= raw ApplicationHelper.youtube_embed(course.youtube_url) %></p>
<% end %>
<% if course.language_id == 1 %>
<p> <%= image_tag("eng.png", :alt => "England", :class =>"round") %></p>
<% else %>
<p> <%= image_tag("swe.png", :alt => "Sweden", :class =>"round") %></p>
<% end %>
<% if ApplicationHelper.active_link?(course.url) == false %>
<td><%= I18n.t('home.broken_link') %></td>
<% end %>
<p><%= course.nbr_of_votes %> <%= I18n.t('home.votes') %></p>
</tr>
然后在 afrikaans.html.erb 中渲染您的部分内容:
<% @afrikaans.each do |course| %>
<%= render 'shared/partial', :course => course %>
<% end %>
或 swahili.html.erb :
<% @swahili.each do |course| %>
<%= render 'shared/partial', :course => course %>
<% end %>
答案 1 :(得分:0)
这绝对是可能的,而且通常是一个好主意。
将来,如果您能够发布实际结果和/或错误消息,这将会很好,这在帮助您时会有很大帮助。
那就是说,我猜你需要将course
变量传递给你的部分。变化
<%= render 'shared/partial' %>
到
<%= render 'shared/partial', :course => course %>
Partial无法访问其他partials中的局部变量。从这个意义上讲,您可以将每个partial视为同一对象实例上的单独方法。
答案 2 :(得分:0)
<%= render 'shared/partial', locale: 'swahili', course: course %>
您将在部分设置为“swahili”和@course时分别拥有本地变量“locale”和“course”。另外,我建议将你的部分名称命名为“课程”。