到目前为止,我的网络应用程序非常直接。我有用户,联系人,约会和一些其他事情要管理。所有这些都很简单 - 每个部分只有一个模型,所以我只为每个模型做了一个脚手架,然后修改了脚手架代码以满足我的需要。很容易......
不幸的是,我在下一部分遇到了问题,因为我希望我的应用程序的“财务”部分比我简单搭建的其他部分更深入。例如,当用户单击导航栏上的“联系人”链接时,它只显示联系人列表,非常直接并且与脚手架一致。但是,当用户点击导航栏上的“财务”链接时,我想在页面左侧显示银行帐户,在右侧显示一些交易。
因此,财务选项卡基本上可以处理来自两个模型的数据:交易和bank_accounts。我想我应该制作模型(transactions& bank_accounts),然后创建一个名为Financials的控制器,然后我可以从Financials控制器查询模型并在app / views / financials /中显示页面/ p>
我在这个应用程序布局中是否正确?我从来没有使用过脚手架的基础知识,所以我想确保我做对了!
谢谢!
答案 0 :(得分:4)
如果您对脚手架感到满意,那么我建议您为两者创建一个脚手架
交易:script/generate scaffold transaction financial_id:integer ...
bank_accounts:script/generate scaffold bank_account financial_id:integer ...
和财务script/generate scaffold financials ...
在您的交易模型中,添加以下内容:
class Transaction < ActiveRecord::Base
belongs_to :financial
end
在您的bank_account模型中,添加以下内容:
class Bank_account < ActiveRecord::Base
belongs_to :financial
end
在您的财务模型中,添加以下内容:
class Financial < ActiveRecord::Base
has_many :transactions
has_many :bank_accounts
end
现在,您的财务管理员可以使用以下内容:
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
在您的观看中,您只需执行以下操作即可查看属于特定财务的所有银行帐户:
<% @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 -%>
在您的观看中,您可以通过添加类似的内容来查看属于特定财务的所有交易:
<% @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 -%>
请记住,在创建新的交易/银行帐户时,请使用属于特定金融的ID。希望这可以帮助。干杯! :)
答案 1 :(得分:1)
听起来好像你想要两个观点:
但是,当用户点击导航栏上的“财务”链接时,我想显示页面左侧的银行帐户和右侧的一些交易。右侧的交易。
请记住,一个屏幕并不总是指MVC中的一个视图。从概念上讲,视图只是呈现模型数据,因此用户可以通过控制器操作对其进行有意义的操作。通过让你在每个屏幕的views /目录中创建一个文件,Rails会使这一点变得混乱,因此很容易认为一个屏幕意味着一个视图。但是,您也可以在Rails中调用视图中的布局,这些布局本身就是视图。
将交易和帐户放在单独的视图中意味着每个人都有一个控制器来处理用户与每个数据段的交互。例如,帐户控制器将处理用户选择帐户以查看有关帐户的其他信息的事件。这将导致获取事务以显示用户。然后,用户可以与交易进行交互以试图协调,撤销或对其进行调整。这将调用事务控制器中的逻辑。
虽然这可以很好地从控制器中删除耦合,但这似乎可以将两个视图耦合在一起。但是,耦合是单向的:帐户列表包括特定于事务视图的逻辑(即,在您选择帐户时更新它)。事务视图在应用程序的其他区域仍可重用。在大多数情况下,帐户列表仍然可以重复使用,特别是如果您将其隔离为单独的布局。您在此特定屏幕上所需的唯一区别是处理用户点击帐户的时间。
如果将所有内容合并到财务视图中,仍然可以保持松散耦合,但这样做会变得更加困难。附加层需要额外的努力,并可能下意识地指导您将所有内容合并在一起。
当然,无论哪种方式都有效,你可以轻易地争辩说最终设计是一项最好留给开发人员偏好的练习。我只是简单地解释了如何最准确地坚持Rails试图指导开发人员使用的模式。
答案 2 :(得分:0)
我没有大量使用Ruby on Rails或MVC工作的经验,但我认为你会以正确的方式进行。对于面向数据的资源,您通常需要一个模型对象(以及扩展名为数据库表)...也就是说,您的模型应该与您的“名词”相对应。你的控制器的动作是你的“动词”,对我来说,按照你喜欢的方式对它们进行分类是完全合理的。
在这种情况下,我会说在financials
下放置一堆“动词”,它们根据需要与两个模型对象类型进行交互,这是有意义的,如果它对你来说是有意义的就像这样。 (请记住,您还可以评估相应URL对您的组织和直观程度,尽管我确信大多数MVC纯粹主义者会补充说您不应该只依赖于检查URL!)
总而言之,只要对你有意义,我认为你在这里做的一切都是正确的。是的,您必须自己编写视图和控制器操作,但您可以开始使用ruby script/generate controller financials action1 action2 [...]
;至少为您提供视图文件和空控制器操作的骨架。