我有一个名字路线:
map.up_vote 'up_vote', :controller => 'rep', :action => 'up_vote
但是up_vote
需要传入两个参数,postID
和posterID
而我似乎无法想象如何在局部进行,但在集成测试中我没有问题。
部分:
link_to 'Up Vote', up_vote_path, {:postID => session[:user_post_id], :postersID => session[:poster_id]}
集成测试:
post up_vote_path,{:postID => @latest.id,:postersID => users(:bob).id} (this works ok)
1)部分内容发生了什么?
2)我可以对我的测试进行哪些更改以获取此信息?
答案 0 :(得分:4)
一个问题:为什么要在链接中传递会话变量?你可以直接从会议中获取它们......
我不知道在会话中放置:user_post_id 和:poster_id 是否有任何特殊原因,但我建议你做两件事:
1)将您的变量传递到网址,会话可以 evil (尝试在您的浏览器上点击,刷新和转发)
2)在您的网址/控制器操作逻辑中使用资源。
示例(仅在我说得对,你投票给用户的帖子时才有效):
路线:
map.resources :users do |user|
user.resources :posts do |post|
post.resource :vote
end
end
所以你可以拥有这个网址:
/users/:id/posts/:post_id/vote
链接路径:
link_to "Up", user_post_vote_path(@user, @post), :method => :create
我使用@user和@post而不是整数,因为路径方法接受它们,你可以用以下代码构建一个更短的版本:
link_to "Up", [@user, @post, :vote] # or [:vote, @post, @user]
实现:
class VoteController ....
def create
# do your stuff here
end
end
这样会更容易和RESTful。
Ryan Bates获得great episode资源,绝对值得一看。
答案 1 :(得分:3)
您希望在..._path
link_to "Up Vote", up_vote_path(:postID => session[:user_post_id], :postersID => session[:poster_id])
自您测试行为以来,集成测试的编写方式与link_to不同。
发布“to” up_vote_path,“with these” {params}
此外,由于您正在进行POST,您需要在link_to