好吧,我已经坚持这个问题6天了。好消息:在尝试自我解决时,我已经了解了MVC结构的不可估量的数量。坏消息:仍然没有解决它。
提示帮助
在我的应用程序中,我有3个数据源(如果计算会话,技术上为4)。具有许多预算且具有许多交易的用户。
我目前正在总结用户控制器中3的组合:
#users_controller.rb
def my_budget
@transaction = current_user.transactions
@month = params[:search]
@budget = current_user.budgets
@user = current_user
end
在我看来,我根据类型显示每个用户的预算(第1列>与其交易总和(第2列)的比较(对于此示例, 11与我的数据库中的“总收入”相关。然后,我计算两者之间的差异(第3列)。
#my_budget.html.erb
<% @user.budgets.each do |budget| %>
<tr>
<td><h3 class="section-header">Current Income:</h3></td>
</tr>
<tr>
<td class="section-sub-header">Gross:</td>
<td class="section-value"><%= number_to_currency(budget.income_per_month) %></td>
<td class="section-value"><%= number_to_currency(@user.get_transaction(current_user, 11)) %></td>
<td class="section-value difference-value"><%= number_to_currency(@user.total_difference(budget.income_per_month, current_user, 11)) %></td>
</tr>
显然,这些信息毫无用处。例如,如果用户在4月份之前跟踪他们的交易,他们将永远有负预算,因为第2列和第3列目前将每月预算与所有交易进行比较自用户创建帐户以来发生的。因此,我尝试了许多尝试来创建选择月份来查看的能力,然后按该值汇总数据。
在我的一个部分中,位于视图的顶部我(特别格式化为用户只能选择MM / YYYY格式的月份和日期):
#_classic_view.html.erb
<%= form_tag(my_budget_path, :method => "get") do %>
<%= text_field_tag :search, params[:search], name: "startDate", id: "startDate", class: "date-picker form-control", placeholder: "Select Month" %>
<%= submit_tag "Sort", :name => nil, class: "btn-submit-user text-center", style: "padding: 5px" %>
<% end %>
以下是我的模型的摘录:
#user.rb
class User < ApplicationRecord
attr_accessor :search
has_many :budgets
has_many :transactions
...
# attempt at pulling the param via search
def self.search(search)
where("created_at LIKE ?", "%#{@search}%")
end
...
# Get transaction sum for the specific sub-category
def get_transaction(user, type)
if search
total_value = user.transactions.where("transactions.sub_category" => "#{type}").search(@search).sum(:amount)
else
total_value = user.transactions.where("transactions.sub_category" => "#{type}").sum(:amount)
end
end
我已经完成了访问params的计划,只是为了看看我在视图中使用的是什么(哦,我希望Ruby有一个简单的console.log):
#my_budget.html.erb
<h2 class="text-center"><%= @user.current_month(@month) %> Summary</h2>
#user.rb
def current_month(val)
if val
current = val
else
current = Date.today.strftime("%B %Y")
end
current
end
请帮助:
已解决我在User.rb中使用get_transaction()是否正确?具体来说,我如何调用Transaction。作为整个班级。
我知道你不应该根据MVC结构访问params,但是如何将这些信息传递给我的模型或视图(因为我传统上没有循环遍历@transaction变量)?
我的搜索/排序方法是否适用于我在模型,视图和控制器中的实现?
谢谢!
编辑:
解决#1 :我没有正确使用交易。我这样做是因为您无法访问模型中的“current_user”方法,但您可以将其作为视图中的参数传递。我调整了我的代码以显示此修复程序。
答案 0 :(得分:0)
在模型中创建范围,如
DownloadManager.Query
这将充当过滤器。明智地从控制器访问它。
如果您想找到DownloadManager.Query query = null;
Cursor c = null;
DownloadManager downloadManager = null;
downloadManager = (DownloadManager)getSystemService(Context.DOWNLOAD_SERVICE);
query = new DownloadManager.Query();
if(query!=null) {
query.setFilterByStatus(DownloadManager.STATUS_FAILED|DownloadManager.STATUS_PAUSED|DownloadManager.STATUS_SUCCESSFUL|
DownloadManager.STATUS_RUNNING|DownloadManager.STATUS_PENDING);
} else {
return;
}
c = downloadManager.query(query);
if(c.moveToFirst()) {
int status = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS));
switch(status) {
case DownloadManager.STATUS_PAUSED:
break;
case DownloadManager.STATUS_PENDING:
break;
case DownloadManager.STATUS_RUNNING:
break;
case DownloadManager.STATUS_SUCCESSFUL:
break;
}
}
的总和,那么您可以这样做
class Transaction < ApplicationRecord
scope :by_month, -> (year, month_name = '') {
month = Date::MONTHNAMES.index(month_name.capitalize)
first_day_of_month = Date.new(year, month, 1)
last_day_of_month = Date.new(year, month, -1) # Gives you the last day of month
where("transactions.created_at between ? and ?", first_day_of_month, last_day_of_month)
}
end
用于该月用户的交易金额
:amount