ruby-on-rails – Rails设计多态 – 使用Ajax渲染部分渲染
发布时间:2020-12-17 04:32:54 所属栏目:百科 来源:网络整理
导读:我已经实现了从 this answer开始使用多个模型进行设计注册.这样就可以从路径中获取params user_type. 我想用select user_type更改它.因此,当我在select_tag上选择一个值时,将获得一个param user_type. 我有一些代码看起来像: 的routes.rb namespace :cp do
我已经实现了从
this answer开始使用多个模型进行设计注册.这样就可以从路径中获取params user_type.
我想用select user_type更改它.因此,当我在select_tag上选择一个值时,将获得一个param user_type. 我有一些代码看起来像: 的routes.rb namespace :cp do devise_scope :user do match '/add_user' => 'registrations#new' match '/select/admin' => 'registrations#selectuser',:user => { :usertype => 'admin' } match '/select/player' => 'registrations#selectuser',:user => { :usertype => 'player' } end end registrations_controller.rb def selectuser respond_to do |format| format.js end end new.html.erb <h2>Add User</h2> <%= form_for(resource,:as => resource_name,:url => registration_path(resource_name)) do |f| %> <%= devise_error_messages! %> <div><%= f.label :username,"Username" %><br /> <%= f.text_field :username %></div> <div><%= f.label :email,"Email" %><br /> <%= f.email_field :email %></div> <div><%= f.label :password,"Password" %><br /> <%= f.password_field :password %></div> <div><%= f.label :password_confirmation,"Password Confirmation" %><br /> <%= f.password_field :password_confirmation %></div> <div><%= f.label :usertype,"Select User Type" %><br /> <%= f.select(:usertype,options_for_select([['-- User Type --',nil],['Admin','admin'],['Player','player']],selected: '-- User Type --' )) %> </div> <div id="selectuser"> </div> <% end %> <div><%= f.submit "Submit" %></div> <% end %> <script type="text/javascript"> $("#user_usertype").on('change',function() { var s = $(this).val(); $.ajax({ type: 'GET',url: 'http://localhost:3000/cp/select/' + s,dataType: "HTML" }); }); </script> selectuser.js.erb <% params[:user][:usertype] ||= 'admin' if ["admin","player"].include? params[:user][:usertype].downcase child_class_name = params[:user][:usertype].downcase.camelize usertype = params[:user][:usertype].downcase else child_class_name = "Admin" usertype = "admin" end nesteds = fields_for child_class_name.constantize.new do |rf| render :partial => child_class_name.underscore + '_fields',:locals => {:f => rf} end %> $("#selectuser").append("<%= j nesteds %>"); 当我选择管理员值时,记录: Started GET "/cp/select/admin" for 127.0.0.1 at 2013-10-21 17:00:04 +0700 Processing by Cp::RegistrationsController#selectuser as HTML Parameters: {"user"=>{"usertype"=>"admin"}} Rendered cp/registrations/_admin_fields.html.erb (4.0ms) Rendered cp/registrations/selectuser.js.erb (7.0ms) Completed 200 OK in 22ms (Views: 22.0ms | ActiveRecord: 0.0ms) 但_admin_fields.html.erb没有出现在#selectuser上 解决方法
你在这里混淆了几件事.
>您的路线定义默认值 如果您需要从下拉列表中进行选择,则无需在此处定义默认值.它只会让事情复杂化 match '/add_user' => 'registrations#new',:user => { :usertype => nil } match '/select/admin' => 'registrations#selectuser',:user => { :usertype => 'admin' } match '/select/player' => 'registrations#selectuser',:user => { :usertype => 'player' } >你没有使用正确的表格助手 如果你想获得params [:user] [:usertype]的输出,你需要使用f.select.如果您的模型没有这样的属性,则可以将其作为attr_accessor添加到模型中. <%= label :usertype,"Select User Type" %><br /> <%= select_tag(:usertype,selected: '-- User Type --' )) %> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |