3

我的控制器中有一个显示动作:

  # GET /posts/1
  # GET /postings/1.json
  def show
    @post = Post.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @posts }
    end
  end

我在同一个控制器中还有另一个动作

  def dosomething
      @currentpost = ??
  end

如何在 dosomething 操作中获取对当前显示帖子的引用?

4

2 回答 2

8

你说dosomething的是一个动作。这意味着,它在单独的 HTTP 请求中被调用。

有几种方法可以在请求之间共享数据:

  • 存储在会话中
  • 将其存储在表单的隐藏字段中,如果dosomething是表单的操作
  • 将其作为参数转发,如果dosomething由 a 调用link_to
  • ifdosomething是 a 的一个动作post,所有这些都在 the 中,PostsController并且您有一条通往该动作的路线,那么:

在您的展示视图中使用

<%= link_to 'do something', dosomething_post_path(@post) %>

在你的行动中

def dosomething
  @currentpost = Post.find(params[:id])
  ....
end

在你的routes.rb你需要类似的东西

resources :posts do
  member do
    get 'dosomething'
  end
end

或使用表格:
在您看来:

<%= form_for @message, :url => {:action => "dosomething"}, :method => "post" do |f| %>
   <%= hidden_field_tag :post_id, @post.id %>
...

在您的控制器中:

def dosomething
  @currentpost = Post.find(params[:post_id])
  ....
end
于 2013-06-02T15:39:42.570 回答
0

您必须将所需的变量从第一个传递controllerview第一个。这意味着从show动作中你必须将变量传递给它的view. 从那view你必须dosomthing用这个变量点击或调用动作。

您可以dosomthing通过ajax请求或.view

于 2013-06-02T16:14:40.067 回答