2013-04-30 29 views
6

Để có thể thấy nếu một người dùng đã chia sẻ trang web của tôi trên Facebook, tôi muốn để có thể tạo ra loại URL:URL cơ bản của ứng dụng Rails trong Model

http://graph.facebook.com/?id=http://stylehatch.co/some_unique_user_token 

đâu http://stylehatch.co sẽ cần làm URL cơ sở của tôi. Tôi đang nghĩ đến việc có một phương thức trong mô hình User sẽ xây dựng và trả về URL đó, nhưng tôi không thể truy cập root_url từ bên trong mô hình của mình.

Làm cách nào để lấy URL cơ sở của ứng dụng từ Mô hình?

Giả sử nếu url của tôi trông như thế này:

http://myapp.com/users/new 

http://myapp.com/users/2/show 

Làm thế nào tôi có thể nhận được "http://myapp.com" từ mô hình của tôi? Tôi đã thêm:

include Rails.application.routes.url_helpers 

trong mô hình của tôi, nhưng có vẻ như root_url là không. Có suy nghĩ gì không? Đây có phải là một phương pháp Model đúng hay tôi nên đặt nó trong một trình trợ giúp?

Cảm ơn

+0

Chỉ cần cho một số bối cảnh, những gì bạn muốn làm với URL cơ sở trong một mô hình? – summea

+0

có thể trùng lặp của [Làm thế nào để tôi nhận được máy chủ và cổng trong ứng dụng Rails] (http://stackoverflow.com/questions/2813290/how-do-i-get-the-host-and-port-in-a -rails-applicaiton) –

+1

Hãy để tôi chỉnh sửa và thêm một số ngữ cảnh. –

Trả lời

3

Bạn không muốn mô hình biết url. Nhưng trong bộ điều khiển bạn có đối tượng gọi là request. Bạn có thể nhận được url theo số "#{request.protocol}#{request.host}".

+0

Speransky, bạn có nghĩ rằng đó là chính xác để có trong mô hình mặc dù, và vượt qua các url như một tham số? Hay bạn nghĩ điều này thuộc về người trợ giúp? –

+0

Trong trường hợp OP mô tả và trong các trường hợp như gửi email liên kết lại trang web của bạn, bạn thường cần một phần ứng dụng của bạn (có phải là mô hình) hay không để biết url cơ sở của ứng dụng của bạn. [@ earth2jason của câu trả lời] (http://stackoverflow.com/a/24371267/1998680) dưới đây có vẻ là một cách tiếp cận tốt cho điều đó. – maurice

8

Nếu bạn muốn lấy URL gốc trong mô hình của mình, điều tôi đã làm là gọi biến ENV.

Nếu bạn chưa sẵn sàng, đi trước và tạo .env trong thư mục gốc của applicatoin của bạn và thiết lập trong sự phát triển để:

ROOT_URL=http://localhost 

Trong môi trường sản xuất của bạn thiết lập:

ROOT_URL=https://mydomain.com 

Tất nhiên điều này là khó mã hóa nên lỗ hổng là bạn cần phải nhớ thay đổi điều này khi thay đổi tên miền và tập tin của mỗi môi trường phải khác nhau.

Và hãy chắc chắn điều này cũng nằm trong gitignore của bạn vì các dữ liệu nhạy cảm khác sẽ được lưu trữ tại đây.

Trong mô hình của bạn, bạn gọi theo: ENV [ 'ROOT_URL']

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