嘿。我想我在这里陷入困境。 我正在使用Rails 2。在我的控制器的索引视图中,我设置了类似
的内容def index
@posts = Post.all
end
这样我就可以在我的索引中使用@posts
,例如每个-DO。我想将@posts
传递给自定义视图,在那里我可以再次使用相同的变量。我想通过索引视图进行链接。这样的事情:
link_to "newpage", {:controller => 'posts', :action => 'newmethod', :param => @posts}
到目前为止,我创建的是Post控制器中的一种新方法。一种新观点。以及通往该网站的新路线。有什么建议? thx你的时间
答案 0 :(得分:1)
在您的控制器中
def newmethod
@posts = Post.all
end
您无法在链接中传递所有模型!索引操作中的@posts var在请求
后消失答案 1 :(得分:1)
您将不得不将这些值折叠为适合URL的内容,然后再对其进行解码。例如:
# Put this in your helper method module PostsHelper
def post_ids
@posts.collect(&:id).join(',')
end
您调整后的链接将是:
link_to "newpage", {:controller => 'posts', :action => 'newmethod', :param => post_ids }
当您获取下一页时,您需要通过再次检索它们来解码它们:
@posts = Posts.find(params[:param].split(/,/))
无法在请求之间传递实例变量,因为它们已被明确清除。
作为注释,请尝试使用生成的路由方法而不是哈希样式声明。您可能已在rake routes
中列出了一条路线:
# Instead of { :controller => 'posts', :action => 'new', :param => post_ids }
new_post_path(:param => post_ids)
这些生成的方法在实践中更具可读性,如果您想通过调整路由表来重新解释它们的含义,那么它具有以后可配置的优势。
另一个注意事项是,如果ID列表变得非常大,您可能无法将它们编码为URL,因为限制大约为1500字节。您可能必须首先序列化用于生成列表的条件,然后再重新运行它们。只要你处理数十件而不是数百件,你应该没事。
答案 2 :(得分:1)
我知道在会话中存储任意数据不是最佳做法,但在某些情况下,这种方法简单易行。
在您的控制器中:
def balabala
#...
session[:your_var] = "this is the var used in another view&action!"
# ...
end
在任何其他页面中:
<%= session[:your_var] %>
就是这样。丑陋,根本不是MVC。 :)仅适用于非常罕见的情况。 :)