我的控制器中有一个show动作:
# 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动作中获得对当前显示的帖子的引用?
答案 0 :(得分:8)
你说dosomething
是一个动作。这意味着,它是在单独的HTTP请求中调用的。
有几种方法可以在请求之间共享数据:
dosomething
是表单dosomething
调用link_to
,则dosomething
是post
的操作,并且所有这些操作都在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
答案 1 :(得分:0)
您必须先将所需的变量从controller
传递到view
。这意味着从show
操作开始,您必须将变量传递给它view
。从那个view
开始,您必须使用此变量点击或调用dosomthing
操作。
您可以通过 ajax 请求或通过dosomthing
提交表单来点击/调用此view
操作。