2016-03-31 20 views
0

almak modeli nesnesini genişletmek olamaz: o ilk satırı bir TypeError: no implicit conversion of Symbol into Integer yükselttiğiniRaylar rota Şöyle benim görünümden birinde bir form var kimliği

<% form_for @user, url_for(:controller => :users, :action => :admin_edit, :id => @user.id) do |f| %> 
    <%= f.select 'Confirmed', [['Yes', true], ['No', false]] %> 
    <%= f.submit 'Update' %> 
<% end %> 

. I ,'u düşünün, çünkü rotanın (aşağıdaki) bir ID'ye ihtiyacı vardır, ancak ihtiyaç duyduğu kimliği bulamamaktadır.

users#admin_edit yöntemi şu anda boş bir tanımdır. bunu işaret eden yoldur: Söz konusu

post 'admin/users/:id/edit', to: 'users#admin_edit' 

@user nesne

@user = User.find(params[:id]) 

yüzden :id nitelik kesinlikle ayarlanır kullanılarak ayarlanır; Bunu konsol ile doğruladım.

Kimliği açıkça url_for numaralı belgeden geçirdiğim için, neden kimliğini almak için rota @user nesnesini genişletmiyor? Ya da olabilir, ve konu tamamen başka bir yerde mi?

cevap

1

bu deneyin:

<%= form_for @user, url: {:action => :admin_edit} do |f| %> 
    <%= f.select 'Confirmed', [['Yes', true], ['No', false]] %> 
    <%= f.submit 'Update' %> 
<% end %> 


sen olarak yolları kurduysanız:

post 'admin/users/:id/edit', to: 'users#admin_edit' 

şöyle Sonra formu olabilir:

<%= form_for @user, url: {:controller => ::users, :action => :admin_edit, :id => @user.id}, method: :post do |f| %> 
<%= f.select 'Confirmed', [['Yes', true], ['No', false]] %> 
<%= f.submit 'Update' %> 
<% end %> 

Sonra alabilirsiniz senin UsersController içinde id bakabilir aşağıdaki gibi:

def admin_edit 
@user = User.find_by_id(params[:id]) 
end