我已經實現了使用this answer的多個模型設計註冊。這從路徑獲得參數user_type
。 我想用選擇user_type
對此進行更改。因此,當我在select_tag
上選擇一個值時,param user_type將會得到。Rails設計多態 - 使用Ajax獲取渲染部分
我有一些代碼看起來像:
的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
如果性別是所有關於男性和女性,沒有必要去碰服務器,只需在模板代碼吧。 –
@BillyChan:我不知道你是什麼意思? – itx