Rails 4 – Bootstrap模态forms – 设置

我正在尝试按照本教程在我的Rails 4应用程序中设置包含嵌套表单的模式。

我有Project和Invite的模型。 协会是:

Project has_many :invites Invite belongs_to :project 

在我的views项目文件夹中,我做了一个名为new_invitation.html.erb的部分

    

我正在尝试从我的项目显示页面链接到该项目,该页面包含:

  true, 'data-toggle' => "modal", 'data-target' => '#modal-window'} %>  

在我的app / javascripts文件夹中,我有一个名为new_invitation.js.erb的文件,其中包含:

 $("#modal-window").html(""); 

在我的应用程序js中,我有:

 //= require bootstrap/modal 

(与教程略有不同,因为我使用rails 4和bootstrap sass)。

在我的项目控制器中,我有:

 def new_invitation respond_to do |format| format.html format.js end end 

我将路由从put更改为get动作(虽然我不明白这一步):

  resources :projects do member do get "new_invitation" => "projects/new_invitation", as: :new_invitation end resources :invites end 

上述尝试中的链接路径存在问题。 我不知道为什么,但错误消息建议使用:

 new_invitation_project_path 

当我尝试这个时,我得到一个错误,上面写着:

 undefined method `render' for #<#:0x007fa2a04a1308> 

我在教程的评论中看到,有人试图将js文件重写为:

 $("#modal-window").html(" 'project/new_invitation') %>"); 

我尝试过,但得到相同的错误消息。 任何人都可以看到我可能需要做些什么来复制教程似乎对其他用户的成功?

问题在于此处定义的成员路由。

 resources :projects do member do get "new_invitation" => "projects/new_invitation", as: :new_invitation end 

结束

生成的成员路由是

 new_invitation_project GET /projects/:id/new_invitation(.:format) projects/new_invitation#new_invitation 

控制器动作projects/new_invitation#new_invitation甚至不存在。

映射应采用格式controller#action 。 所以,它应该是

 get "new_invitation" => "projects#new_invitation", as: :new_invitation 

甚至更好,

 get :new_invitation 

使用rake routes | grep invitation rake routes | grep invitation看到生成的路线。

new_invitation操作中,您将呈现js响应。 因此,rails将在app/views/projects寻找new_invitation.js.erb 。 您必须将文件从app/javascripts移动到如上所述的正确位置。

你的new_invitation.js.erb代码还有另一个问题。 _new_invitation.html.erb位于views/projects/目录中。 所以,你应该修改它

 $("#modal-window").html("<%= escape_javascript(render 'projects/new_invitation') %>"); 

否则,您将在project目录中查找Missing Template出现“ Missing Template错误。 确保在app/views/projects目录中有_new_invitation.html.erb部分定义。

要渲染模态,您需要使用modal方法显示模modal

 $('#modal-window').modal('show'); 

你的new_invitation.js.erb应该是这样的。

 $("#modal-window").html("<%= escape_javascript(render 'projects/new_invitation') %>"); $('#modal-window').modal('show'); 

希望这可以帮助!