在Rails 3应用程序中,我有一个包含搜索逻辑的视图。查看页面时,@events
包含要显示的记录。
查看代码:
<% @events.each do |event| %>
...
我在页面底部有一个按钮,可以使用axlsx创建Excel电子表格。我正试图将@events传回控制器。
这就是我正在尝试按钮:
<%= link_to "Excel", event_path("supportlog.xlsx", :events => @events), :class => 'btn btn-warning' %>
然后,在事件控制器中:
def supportlog
@events = params[:events]
@events = Event.find(@events)
respond_to do |format|
format.xlsx
end
end
之前,我使用了params来传递一个id - 这是我第一次尝试传递一个列表。
感谢您的帮助!
更新1
我将控制器更改为:
def index8
@search = Event.search(params[:q])
@events = @search.result
respond_to do |format|
format.html # index.html.erb
format.xlsx
end
end
索引8查看按钮:
<%= link_to "Excel", event_path("index8.xlsx"), :class => 'btn btn-warning' %>
但是,我需要将搜索参数重新放回控制器。
更新2
这有效:
<%= link_to "Excel", event_path("index8.xlsx", :q => params[:q]), :class => 'btn btn-warning' %>
答案 0 :(得分:0)
您可以将搜索参数传递回控制器。或者甚至更好,使搜索/索引的导出部分(作为不同的格式)。
static ManualResetEvent _clientDone = new ManualResetEvent(false);
const int TIMEOUT_MILLISECONDS = 500000000;
const int MAX_BUFFER_SIZE = 2048;
public string Receive_msg()
{
string response = "Operation Timeout";
if (_socket != null)
{
SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs();
socketEventArg.RemoteEndPoint = _socket.RemoteEndPoint;
socketEventArg.SetBuffer(new Byte[MAX_BUFFER_SIZE], 0, MAX_BUFFER_SIZE);
socketEventArg.Completed += new EventHandler<SocketAsyncEventArgs>(delegate(object s, SocketAsyncEventArgs e)
{
if (e.SocketError == SocketError.Success)
{
response = Encoding.UTF8.GetString(e.Buffer, e.Offset, e.BytesTransferred);
response = response.Trim('\0');
Debug.WriteLine(response);
}
else
{
response = e.SocketError.ToString();
}
_clientDone.Set();
});
_clientDone.Reset();
_socket.ReceiveAsync(socketEventArg);
_clientDone.WaitOne(TIMEOUT_MILLISECONDS);
}
else
{
response = "Socket is not initialized";
}
return response;
}
然后您可以在指定格式时使用搜索/索引URL:
# search is part of the index action
def index
search_params = params[:search] || {}
@events = Event.search(search_params)
respond_to do |format|
format.html {}
format.json {}
format.xlsx {}
end
end
HTTP仅传递视图/表单和服务器之间的参数。 Rails解析HTTP参数并构造params散列,但不创建AR对象。