让我们说我想创建一个resources
,并为其添加一些自定义操作,rails中的模拟是:
resources :tasks do
member do
get :implement
end
end
这不仅会给我带来7条标准路线,还会带来1条新路线:
GET /tasks/:id/implement
我怎么能在凤凰城做到这一点?
答案 0 :(得分:22)
我想稍微改善**the file.py:**
"""
dependencias:
sudo pip install dopy pyopenssl ndg-httpsclient pyasn1
"""
import os
from dopy.manager import DoManager
import urllib3.contrib.pyopenssl
urllib3.contrib.pyopenssl.inject_into_urllib3()
api_version = os.getenv("DO_API_VERSION")
api_token=os.getenv("DO_API_KEY")
#do = DoManager(cliend_id, api_key)
do = DoManager(None, api_token, api_version=2)
keys = do.all_ssh_keys()
print "ssh key name\tid"
for key in keys:
print "%s\t%d" % (key["name"], key["id"])
print "Image name\tid"
imgs = do.all_images()
for img in imgs:
if img["slug"] == "ubuntu-14-04-x64":
print "%s\t%d" % (img["name"], img["id"])
print "Region name\tid"
regions = do.all_regions()
for region in regions:
if region["slug"] == "nyc2":
print "%s\t%d" % (region["slug"], region["id"])
print "Size name\tid"
sizes = do.sizes()
for size in sizes:
if size["slug"] == "512mb":
print "%s\t%d" % (size["slug"], size["id"])
的答案:
Dogbert
路线末尾唯一添加resources "/tasks", TaskController do
get "/implement", TaskController, :implement, as: :implement
end
。
因此,您将获得名为as: :implement
的路线,而不是丑陋的task_implement_path
。
答案 1 :(得分:15)
您可以在get
的{{1}}块中添加do
。
resources
resources "/tasks", TaskController do
get "/implement", TaskController, :implement
end
$ mix phoenix.routes
答案 2 :(得分:11)
这是另一种解决方案:
scope "/tasks" do
get "/:id/implement", TasksController, :implement
get "/done", TasksController, :done
end
resources "/tasks", TasksController
implement
操作有成员路由,done
操作有集合路由。
您可以通过此函数调用获取前者的路径:
tasks_path(@conn, :implement, task)
请注意,您应该在<{em} resources
块之后放置scope
行。否则,凤凰城会将/tasks/done
视为show
行动的路径。
答案 3 :(得分:-1)
看起来收集路线必须是:
get "tasks/implement", Tasks, :implement # collection route
我不认为phoenix有像rails这样的成员/集合资源路由。
我发现这个链接是他们稍微谈论收集路线并给出一个例子,就像我上面提到的那样: