2015-10-05 40 views
5

Tôi đang cố gắng tìm hiểu Phoenix và gặp một câu hỏi. Trong Rails tôi có thể nóiCách gọi các chức năng từ một tập tin .eex

<%= Rails.version %> 

để lấy phiên bản đường ray hiện tại được hiển thị trong tệp .erb. Tôi hỏi về cách thực hiện điều này ở Phoenix và nhận được câu trả lời

:application.get_key(:phoenix, :vsn) 

Thật không may, điều này làm nổi bật sự thiếu hiểu biết của tôi khi tôi cố gắng tăng cường với Phoenix. Khi tôi đặt

<%= :application.get_key(:phoenix, :vsn) %> 

trong tập tin .eex của tôi, tôi nhận được

no function clause matching in Phoenix.HTML.Safe.Tuple.to_iodata/1 

Xin vui lòng chỉ cho tôi với bất kỳ tài liệu có thể giúp tôi để tìm hiểu những gì để thử tiếp theo. Cảm ơn bạn!

Trả lời

8

Các :application.get_env gọi trả về một tuple trong định dạng:

{:ok, '1.0.0'} 

Phoenix.HTML.Safe không có một chức năng để giải mã một tuple ở định dạng này (source). Bạn sẽ cần phải trích xuất các phiên bản từ cuộc gọi:

<%= :application.get_key(:phoenix, :vsn) |> elem(1) %> 

Tuy nhiên một cách tốt hơn là nên sử dụng một hàm helper:

defmodule VersionHelper do 
    def version do 
    case :application.get_key(:phoenix, :vsn) do 
     {:ok, vsn} -> vsn 
     _   -> #raise or return null or something else 
    end 
    end 
end 

này sau đó có thể được gọi theo quan điểm của bạn với VersionHelper.version - đây có nghĩa là việc tìm nạp phiên bản của bạn không được gắn với khóa mà phượng hoàng sử dụng trong chế độ xem.

+0

Cảm ơn bạn! Tôi đánh giá cao sự giúp đỡ của bạn. –

Các vấn đề liên quan