我的路线看起来像这样:
resources :projects do
resources :tasks
end
它为您提供了如下URL:URL / projects / 14 / tasks / 3
模型定义:
project has_many :tasks
task belongs_to :project
现在,当用户点击指向某个任务的链接时,我正在通过远程=>将任务#show加载到div中。项目展示视图中的真实链接。这很好。
#tasks/show.js.erb
$('#task_content').html("<%= j render(partial: 'tasks/single', locals: { t: @task }) %>");
#tasks/_single.html.erb
<%= t.content %>
问题在于我希望用户能够访问URL / projects / 14 / tasks / 3并自动将任务加载到项目视图中的div中。
基本上,我需要找到一种方法让URL/projects/14/tasks/3
实际呈现URL/projects/14
,然后调用jquery $('a#task_<%= task.id %>').click()
我似乎无法弄清楚如何让视图识别出这种行为。任何人都可以指出我正确的方向吗?
感谢!!!
修改
#TasksController
def show
@task = Task.find(params[:id])
respond_to do |format|
format.js
end
end
#ProjectsController
def show
@project = Project.find(params[:id])
respond_to do |format|
format.html # show.html.erb
end
end
项目#show有两个主要元素:
答案 0 :(得分:1)
基本上,我需要找到一种方法来获取URL / projects / 14 / tasks / 3 实际上渲染URL / projects / 14,并调用jquery $('a#task_&lt;%= task.id%&gt;')。click()
您可以测试标准HTTP调用(非AJAX)是否到达任务,并重定向到项目的URL,传入参数以在加载时自动加载任务。由于您的默认情况使用js
格式,因此更简单 - 您只需测试html
格式:
#TasksController
def show
@task = Task.find(params[:id])
respond_to do |format|
format.html { redirect_to project_path(@task.project_id, :load_task_id => @task.id) }
format.js
end
end
# somewhere in /projects/show partial
<% if params[:load_task_id] %>
<script type="text/javascript">
$(function(){
$('a#task_<%= params[:load_task_id] %>').click()
});
</script>
<% end %>
答案 1 :(得分:1)
我可能会使用Rails Routing Constraints将xhr请求定向到任务控制器并将http请求发送到项目控制器,并将任务ID作为参数,使该变量可用于您的视图,然后您的视图可以检查如果任务变量存在并加载div?或者用JS检查URL。
有些事情:
match "/projects/:id/tasks/:tid", :to => "projects#show", :constraints => lambda { |request| !request.xhr? }
match "/projects/:id/tasks/:tid", :to => "tasks#show", :constraints => lambda { |request| request.xhr? }
未经测试,但可能是混蛋?