我目前有一个生成报告的控制器。这是控制器:
def last5days
#@monday = (Time.now).at_beginning_of_week
@monday = (Time.now).months_ago(1)
#@friday = 5.days.since(@monday)-1.second
@friday = (Time.now)
@sent_emails = ContactEmail.all(:conditions => ['date_sent >= ? and date_sent <= ?', @monday, @friday])
@made_calls = ContactCall.all(:conditions => ['date_sent >= ? and date_sent <= ?', @monday, @friday])
@letters_sent = ContactLetter.all(:conditions => ['date_sent >= ? and date_sent <= ?', @monday, @friday])
@contacts_added = Contact.all(:conditions => ['date_entered >= ? and date_entered <= ?', @monday, @friday])
#@table = ContactEmail.report_table(:all,
# :conditions => ['date_sent >= ? and date_sent <= ?', @monday, @friday])
#@grouping = Grouping(@table, :by => "email_id")
end
我希望有一个界面,人们可以选择开始日期和结束日期,点击提交,然后返回输出。
而不是硬编码monday
和friday
。
我很难找到一个例子或确切知道该怎么做。
我从一个新观点开始:
<%= render :partial => 'form' %>
<div id = 'display'>
</div>
我希望控制器的输出通过Ajax显示在“display”中。
我尝试按如下方式创建表单:
<% remote_form_for do |f| %>
<p>
<%= f.label :start_date %><br />
<%= f.date_select_tag :start_date %>
</p>
<p>
<%= f.label :end_date %><br />
<%= f.date_select_tag :end_date %>
</p>
<p><%= f.submit "Submit" %></p>
<% end %>
然后我的计划是将控制器更改为接受params[:start_date]
和params[:end_date]
但我不认为我完全知道这些作品是如何结合在一起的。指导?帮助
以下是我现在正在尝试的内容:
查看:find_start_end.html.erg
<% form_tag('return_search') do %>
<p>
<label>Start Date</label> <%= date_select('start_date', 'params') %>|
<label>End Date</label> <%= date_select :end_date, params[:end_date] %>
</p>
<p><%= submit_tag "Get Stats" %></p>
<% end %>
控制器:
def return_search
@sent_emails = ContactEmail.all(:conditions => ['date_sent >= ? and date_sent <= ?', params[:start_date], params[:end_date]])
@made_calls = ContactCall.all(:conditions => ['date_sent >= ? and date_sent <= ?', params[:start_date], params[:end_date]])
@letters_sent = ContactLetter.all(:conditions => ['date_sent >= ? and date_sent <= ?', params[:start_date], params[:end_date]])
@contacts_added = Contact.all(:conditions => ['date_entered >= ? and date_entered <= ?', params[:start_date], params[:end_date]])
respond_to do |format|
format.html #view needs to be the same name as the method
end
def find_start_end
end
答案 0 :(得分:1)
1)确保首先获得基本的HTML版本 2)然后将其转移到Ajax。
这个流程让所有人都参与其中并保持逻辑有序。
你的所有逻辑都是正确的,所以我只会给你HTML版本的代码,一旦你搞定了,你可以得到远程版本。
控制器:
def index
@start_date = Date.strptime(params[:start_date],"%d/%m/%Y")
@end_date = Date.strptime(params[:end_date],"%d/%m/%Y")
@stuffs = Stuff.find(:all, :conditions => ["created_at > ? and updated_at < ?",@start_date, @end_date])
responds_to do |format|
format.html #view needs to be the same name as the method
end
end
视图
<% form_tag(stuffs_path, :method => :get) do %>
<p>
<label>Start Date</label> <%= datetime_select :start_date, params[:start_date] %> |
<label>End Date</label> <%= datetime_select :end_date, params[:end_date] %>
</p>
<p><%= submit_tag "Get Stats", :disable_with => "Getting stats..." %></p>
<% end %>
的routes.rb
你需要像这样的顶部一行:
map.resources :stuffs
基本上这是创建特定路线。
现在,您可以调用stuffs_path
,它将转到索引操作。
如果您不使用REST,则search_stuff_path可以是:controller =&gt; :your_controller =&gt; :action =&gt; your_action。如果您使用REST,则需要将其作为成员添加到您的routes.rb中。如果您需要更多信息,请告诉我们。
顺便说一句 - 我使用的东西是你资源的通用术语。我想你想要的是报告所以控制器,路由和视图分别是reports_path和map.resources:reports。
所以现在你已经获得了HTML版本,很容易远程进行。
控制器
def index
responds_to do |format|
format.js render :partial => "remote_report"
# you can use RJS or a partial.
# If it's one place you want to update just use a partial.
# Create a file _remote_report.html.erb as a partial.
# Put this in the views folder of course
end
end
在您看来:
<div id="div_id_to_update">
<% remote_form_tag(stuffs_path, :method => :get, :update => "div_id_to_update") do %>
<p>
your form methods here
</p>
<p>your submit tag here</p>
<% end %>
</div>
这些是您需要更改以使其基于远程的部分。