与嵌入式链接有提示信息(请注意,错误,警告等)的能力是从用户交互的角度看。 然而,嵌入来自所述控制器的快闪消息内的锚标签很脏。
让我们假设这样的提示信息是良好的可用性*:
例如闪存消息通知与嵌入的链接http://img.skitch.com/20090826-xbsa4tb3sjq4fig9nmatakthx3.png (从借用DailyMile.com )
你会采取的控制器和视图之间有什么战术,采用这样的干净?
与嵌入式链接有提示信息(请注意,错误,警告等)的能力是从用户交互的角度看。 然而,嵌入来自所述控制器的快闪消息内的锚标签很脏。
让我们假设这样的提示信息是良好的可用性*:
例如闪存消息通知与嵌入的链接http://img.skitch.com/20090826-xbsa4tb3sjq4fig9nmatakthx3.png (从借用DailyMile.com )
你会采取的控制器和视图之间有什么战术,采用这样的干净?
只是想我会分享这个,因为找到答案,我一直在寻找其它地方:
工程在轨道上3.1
flash[:notice] = "Proceed to #{view_context.link_to('login page', login_path)}".html_safe
格伦吉伦有,他把这种方法称之为Rails中实用的闪光灯消息 。
我(至少对我来说)修改了他的代码片段是一个小更地道。
控制器填补这样的闪光:
flash[:notice] = "Your profile was updated. %s"
flash[:notice_item] = ["Edit again?", edit_profile_path(@profile)]
那么你可能有帮手,看起来是这样的:
def render_flash_messages(*keys)
messages = keys.collect do |key|
content_tag(:p, flash_message_with_item(key), :class => "flash #{key}") if flash[key]
end.join
content_tag(:div, messages, :id => "flash_messages") unless messages.blank?
end
def flash_message_with_item(key)
item = flash["#{key}_item".to_sym]
substitution = item.is_a?(Array) ? link_to(*item) : item
flash[key] % substitution
end
视图看上去简直就像这样:
<%= render_flash_messages(:error, :notice, :warning) %>
(通过视图flash_message_with_item
助手)负责创建锚标记,但是控制器管理什么进入有关进一步行动的可选资源的提示信息。
您可以创建一个辅助方法呈现出基于闪存的消息传回值谐音。
这类似于在Rails中的link_to闪光灯()
# In your controller
flash[:error] = render_to_string(:partial => "sessions/login_failed_message")
# In sessions/_login_failed_message.html.erb
Login failed. If you have forgotten your password, you can #{link_to('reset it', reset_path)}