Rails 4 – Bootstrap模态forms – 设置
我正在尝试按照本教程在我的Rails 4应用程序中设置包含嵌套表单的模式。
我有Project和Invite的模型。 协会是:
Project has_many :invites Invite belongs_to :project
在我的views项目文件夹中,我做了一个名为new_invitation.html.erb的部分
Modal header
**here comes whatever you want to show!**
我正在尝试从我的项目显示页面链接到该项目,该页面包含:
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');
希望这可以帮助!