Rails将记录从视图传递到控制器

时间:2015-09-15 16:57:52

标签: ruby-on-rails

在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' %>

1 个答案:

答案 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对象。