2010-06-12 27 views
5

Ứng dụng web của tôi, cho đến thời điểm này, đã được khá thẳng về phía trước. Tôi có Người dùng, Danh sách liên hệ, Cuộc hẹn và một số thứ khác cần quản lý. Tất cả những điều này rất dễ dàng - nó chỉ là một mô hình cho mỗi phần vì vậy tôi chỉ làm một giàn giáo cho mỗi phần, sau đó sửa đổi mã scaffolded để phù hợp với nhu cầu của tôi. Khá dễ dàng ...Một bộ điều khiển với nhiều kiểu máy? Tôi đang làm điều này một cách chính xác?

Thật không may là tôi đang gặp sự cố trong phần tiếp theo này vì tôi muốn phần 'Tài chính' của ứng dụng của tôi sâu hơn các phần khác mà tôi chỉ đơn giản là giáo dục. Ví dụ: khi người dùng nhấp vào liên kết 'Liên hệ' trên thanh điều hướng, nó chỉ hiển thị danh sách liên hệ, khá thẳng về phía trước và phù hợp với khung hình. Tuy nhiên, khi người dùng nhấp vào liên kết 'Tài chính' trên thanh điều hướng, tôi muốn hiển thị các tài khoản ngân hàng ở bên trái của trang và một vài giao dịch ở bên phải.

Vì vậy, tab tài chính về cơ bản sẽ hoạt động với dữ liệu từ hai mô hình: giao dịch và bank_accounts. Tôi nghĩ tôi nên làm cho các mô hình (các giao dịch & bank_accounts) và sau đó thực hiện một bộ điều khiển được gọi là Tài chính, sau đó tôi có thể truy vấn các mô hình từ bộ điều khiển Tài chính và hiển thị các trang trong app/views/tài chính/

Tôi thích hợp trong bố cục ứng dụng này? Tôi chưa bao giờ làm việc với nhiều điều cơ bản về giàn giáo vì vậy tôi muốn đảm bảo tôi có được quyền này!

Cảm ơn bạn!

Trả lời

4

Nếu bạn cảm thấy thoải mái với giàn giáo sau đó tôi sẽ đề nghị bạn nên tạo ra một giàn giáo cho cả

giao dịch: script/generate scaffold transaction financial_id:integer ...

bank_accounts: script/generate scaffold bank_account financial_id:integer ...

và tài chính script/generate scaffold financials ...

Trong mô hình giao dịch của bạn , hãy thêm điều này:

class Transaction < ActiveRecord::Base 
    belongs_to :financial 
end 

Trong mô hình BANK_ACCOUNT của bạn, thêm này:

class Bank_account < ActiveRecord::Base 
    belongs_to :financial 
end 

Trong mô hình tài chính của bạn, thêm này:

class Financial < ActiveRecord::Base 
    has_many :transactions 
    has_many :bank_accounts 
end 

Bây giờ từ tài chính của bạn điều khiển bạn có thể sử dụng một cái gì đó như thế này:

def index 
    @financial = Financial.find(params[:id]) 

    #This fetches all bank_accounts related to financial 
    @bank_accounts = @financial.bank_accounts 

    #This fetches all transactions related to financial 
    @transactions = @financial.transactions 
end 

Trong chế độ xem của bạn, bạn có thể xem tất cả các tài khoản ngân hàng thuộc về một tài chính cụ thể bằng cách chỉ thực hiện việc này:

<% @bank_accounts.each do |bank_account| -%> 
    <%=h bank_account.something_here %> <!-- something_here is the column name corresponding to your bank_account table. --> 
    <%=h bank_account.something_here %> <!-- something_here is the column name corresponding to your bank_account table. --> 
    <%=h bank_account.something_here %> <!-- something_here is the column name corresponding to your bank_account table. --> 
    . 
    . 
    . 
<% end -%> 

Trong quan điểm của bạn, bạn có thể xem tất cả các giao dịch thuộc về một tài chính đặc biệt bằng cách thêm một cái gì đó tương tự:

<% @transactions.each do |transaction| -%> 
    <%=h transaction.something_here %> <!-- something_here is the column name corresponding to your bank_account table. --> 
    <%=h transaction.something_here %> <!-- something_here is the column name corresponding to your bank_account table. --> 
    <%=h transaction.something_here %> <!-- something_here is the column name corresponding to your bank_account table. --> 
    . 
    . 
    . 
<% end -%> 

Hãy nhớ rằng, trong khi tạo ra một giao dịch mới/bankaccount sử dụng id thuộc đặc biệt tài chính . Hi vọng điêu nay co ich. Chúc mừng! :)

+1

Tôi không chắc chắn nếu đây là cách tốt nhất để triển khai các mối quan hệ cho các mô hình này. Có lẽ, tài khoản và giao dịch có mối quan hệ một - nhiều. Buộc họ trở thành trẻ em của một mô hình với mục đích tạo ra một bộ điều khiển và xem đơn giản để hiển thị thông tin cho hai mô hình liên quan với nhau là nhiều công việc xung quanh hơn bất kỳ thứ gì khác. – Shaun

+0

Bạn nói đúng. Nhưng tôi chỉ cố gắng trả lời các vấn đề ngay lập tức mà @ user363243 đã phải đối mặt với chỉ lưu ý rằng một số mô hình X và Y được gắn với một bộ điều khiển Z. Tôi đã không đoán trước bất cứ điều gì nhiều hơn vì nó không được yêu cầu một cách rõ ràng. :) –

+0

Xin chào các bạn, cảm ơn sự giúp đỡ tuyệt vời! Vấn đề duy nhất với ví dụ trên là 'tài chính' chỉ là một cách để tôi nhóm bank_accounts và các giao dịch liên quan của họ. Tôi có thể gọi nó là 'Trung tâm Ngân hàng' hay bất cứ thứ gì. Điều đó đang được nói, tôi không thể thực sự làm một cái gì đó như @financial = financial.find (params [: id]) – dingalingchickenwiing

0

Tôi không có nhiều kinh nghiệm với Ruby on Rails, hoặc MVC nói chung, nhưng tôi nghĩ bạn đang đi đúng hướng. Bạn thường muốn một đối tượng mô hình (và bằng phần mở rộng, bảng cơ sở dữ liệu) cho các tài nguyên định hướng dữ liệu ... Đó là, các mô hình của bạn phải tương ứng với "danh từ" của bạn. Hành động của bộ điều khiển của bạn là "động từ" của bạn, và với tôi nó có ý nghĩa hoàn hảo để phân loại chúng theo cách bạn thích. Trong trường hợp này, tôi sẽ nói rằng đặt một loạt các "động từ" dưới financials, tương tác với hai loại đối tượng mô hình khi cần, có ý nghĩa NẾU VÀ CHỈ NẾU nó có ý nghĩa với bạn để bạn tổ chức nó như thế này . (Hãy nhớ rằng bạn cũng có thể đánh giá cách tổ chức và trực quan các URL tương ứng cảm thấy với bạn, mặc dù tôi chắc chắn hầu hết các người theo chủ nghĩa MVC sẽ thêm rằng bạn không bao giờ nên chỉ dựa vào kiểm tra các URL!)

Tóm lại , Tôi nghĩ bạn đang làm mọi thứ ngay tại đây, miễn là nó hợp lý với bạn. Có, bạn sẽ phải tự mình viết chế độ xem và hành động điều khiển, mặc dù bạn có thể bắt đầu sử dụng ruby script/generate controller financials action1 action2 [...]; ít nhất là cung cấp cho bạn bộ xương của các tệp xem và các hành động điều khiển trống.

1

Nghe có vẻ với tôi như nếu bạn muốn hai quan điểm:

Tuy nhiên, khi người dùng nhấp chuột vào liên kết 'Tài chính' trên thanh điều hướng, tôi muốn thể hiện các tài khoản ngân hàng ở bên trái của trang và một vài giao dịch ở bên phải. giao dịch ở bên phải.

Hãy nhớ rằng một màn hình không phải lúc nào cũng có nghĩa là một chế độ xem trong MVC. Về mặt khái niệm, một khung nhìn đơn giản chỉ hiển thị dữ liệu mô hình để người dùng có thể làm điều gì đó có ý nghĩa với nó thông qua các hành động của bộ điều khiển. Rails sẽ làm rối lên một chút khi bạn tạo một tập tin trong một khung nhìn/thư mục cho mỗi màn hình, vì vậy thật dễ dàng để nghĩ rằng một màn hình có nghĩa là một khung nhìn. Tuy nhiên, bạn cũng có thể gọi bố cục trong các khung nhìn trong Rails và các bố cục này là các chế độ xem.

Đặt giao dịch và tài khoản trong các chế độ xem riêng biệt có nghĩa là mỗi giao dịch sẽ có bộ điều khiển để xử lý tương tác của người dùng với từng phân đoạn dữ liệu. Ví dụ, bộ điều khiển tài khoản sẽ xử lý sự kiện mà người dùng chọn một tài khoản để xem thông tin bổ sung về tài khoản. Điều này sẽ dẫn đến việc tìm nạp giao dịch để hiển thị cho người dùng. Sau đó, người dùng có thể tương tác với một giao dịch nhằm cố gắng hòa giải, hủy hoặc tranh luận. Điều này sẽ gọi logic trong bộ điều khiển giao dịch.

Trong khi điều này làm tốt công việc loại bỏ khớp nối khỏi bộ điều khiển của bạn, điều này có vẻ như nó kết hợp hai chế độ xem. Tuy nhiên, khớp nối là một chiều: danh sách tài khoản bao gồm logic cụ thể cho giao diện giao dịch (tức là cập nhật nó khi bạn chọn một tài khoản). Chế độ xem giao dịch vẫn có thể sử dụng lại ở các khu vực khác của ứng dụng.Đối với hầu hết các phần, danh sách tài khoản vẫn có thể sử dụng lại, đặc biệt nếu bạn tách nó thành một bố cục riêng biệt. Sự khác biệt duy nhất bạn cần cho màn hình cụ thể này là việc xử lý thời điểm người dùng nhấp vào một tài khoản.

Nếu bạn hợp nhất mọi thứ vào chế độ xem tài chính, vẫn có thể giữ mọi thứ được ghép lỏng lẻo, nhưng sẽ trở nên khó khăn hơn để thực hiện điều đó. Lớp bổ sung cần thêm nỗ lực và có thể hướng dẫn bạn kết hợp mọi thứ lại với nhau một cách vô thức.

Tất nhiên, một trong hai cách hoạt động và bạn có thể dễ dàng cho rằng thiết kế cuối cùng là một bài tập tốt nhất còn lại theo sở thích của nhà phát triển. Tôi chỉ đơn giản là cung cấp giải thích của tôi về cách một trong những chính xác nhất sẽ dính vào các patters Rails cố gắng để hướng dẫn các nhà phát triển để sử dụng.

+1

Tôi đang gặp khó khăn trong việc hiểu điều này - xin lỗi, nhưng tôi khá mới với đường ray! Bạn có gợi ý rằng tôi nên có một bộ điều khiển cho mỗi mô hình (bank_accounts và giao dịch) và tham khảo những bộ điều khiển từ bộ điều khiển tài chính mà tôi sẽ thực hiện? Nếu đó không phải là ý của bạn, tôi không hiểu. :( – dingalingchickenwiing

+1

Bạn sẽ có hai mô hình và hai bộ điều khiển: một trong hai mô hình cho bank_accounts và giao dịch Mỗi bộ điều khiển sẽ quản lý các hành động liên quan đến lượt xem và tương tác với mô hình. Trong ví dụ bạn đưa ra, trang "Tài chính" của bạn sẽ có hai chế độ xem: một tài khoản Ngân hàng liệt kê ở bên cho phép người dùng nhấp và chọn tài khoản và danh sách Giao dịch trong ngăn chính hiển thị – Shaun

+0

ok, khi bạn nói "Trong ví dụ bạn đưa ra, trang" Tài chính "của bạn sẽ có hai lượt xem: một Tài khoản Ngân hàng liệt kê ở bên cho phép người dùng nhấp và chọn tài khoản và danh sách Giao dịch khung chính cho thấy các giao dịch có liên quan. "Bạn có ý nghĩa khi chia sẻ quan điểm? Tôi hỏi điều này vì tôi có thể tải một phần từ một thư mục khác (tức là app/views/bank_accounts/_accounts.html.erb và app/views/transactions/_transaction_list.html.erb) – dingalingchickenwiing

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