Rails

2009-09-25 16 views
9

'da Model Verileri ile Seçim Yapılıyor Böyle basit bir soru sorduğum için özür dilemem gerekiyor, ancak Rails Rehberleri ile gittikçe daha fazla sinirleniyorum. Eminim soruma cevap verdiler, fakat bana 'un bana ne verdiklerini nasıl uyguladıklarını anlamak için yeterli bağlam sağlamazlar. Google da çok fazla yardım etmese de sadece yanlış terimleri/ifadeleri araştırıyorum. Feragatname verildiğinde, sadece devam edip şu soruyu soracağım:Rails

HABTM Album'un Image var. Bunu desteklemek için, image_id ve album_id alanları (başkaları yok) olan bir albums_images tablom var. Benim yaşamım için, resim formumu kısmi olarak nasıl dolduracağımı anlayamıyorum, böylece kullanıcı yeni yüklenen bir resmin ait olması gereken albümleri seçebilir.

Rails öğreniyorum, bu yüzden sadece temelleri istiyorum. Eminim yüzlerce yol yapmak için süslü eklentiler var, ama öncelikle temelleri öğrenmek ve oradan inşa etmek istiyorum. Kısmi Benim formu hemen hemen ders kitabı geçerli:

<% form_for(@image, :html => { :multipart => true }) do |f| %> 
    # All the basics you'd expect to see. 
<% end %> 

Benim en son deneme ben denedim diğer varyasyonların daha iyi çalışmaz, ancak şuna benzer: Yine

<p> 
    <%= f.label :album_id %> 
    <%= f.select(:album_id, current_user.albums, :id, :name) -%> 
</p> 

Ben Sorduğum sorunun sadeliğini anladım ve bulabildiğim şeyi okudum, ancak bunu tam bir çözüm haline getiremedim. Bunu yapmanın pek çok yolu var gibi görünüyor, ama her biri, artıları/eksileri veya bunları daha geniş bir bağlamda gerçekten nasıl kullanacakları hakkında gerçek bir tartışma yok.

Teşekkürler.

GÜNCELLEME: Birkaç not ve kod düzeltmesi gereken anahtarlar. İlk olarak, görüntüler ve albümler arasında bir HABTM ilişkisi var. Her iki model tablosu da diğerine doğrudan referans veren bir FK'ye sahip değildir. İkincisi, albüm koleksiyonu current_user.albums (yukarıda düzeltilmiştir) olarak erişilmelidir. Bir kullanıcı has_many albüm ve bir albüm belongs_to kullanıcısı.

GÜNCELLEME: Şu anda aşağıda IV'si isteği üzerine, bu kodla: Ben çizgi 24'de hata alıyorum

undefined method `album_id' for #<Image:0x1042ec110> 

:

22: <p> 
23: <%= f.label :album_id %> 
24: <%= f.select(:album_id, current_user.albums.collect {|a| [a.name, a.id]}) -%> 
25: </p> 

bu hatayı alıyorum.

+0

Ne tür bir hata olduğunu açıklar mısınız? Veya, geliştirme günlüğünüzün bazı çıktılarını gönderin mi? – theIV

+0

İşte bu, kullandığım varyasyona bağlı olarak hataların hepsi bitti. Ancak, genellikle "album_id" için bir çeşit birleştirme hatası veya eksik bir yöntem hatası oluştu. 22: \t

23: Bu kod ile anda, \t \t <% = f.label: Album_ID%> 24: \t \t <% = f.select (: Album_ID, current_user.albums.collect { | a | [a.name, a.id]}) -%> 25: \t

bu hatayı alıyorum: Ben yardımcı olur umarım 0x1042ec110> : tanımsız yöntem '# için '

+0

Üzgünüz, yorumların kod bloklarına izin vereceğini varsaydım. Orijinal yayına bir güncelleme ekleyeceğim. –

cevap

6

Eh, bu en iyi yol, Raylar yolu olduğundan emin değilim ya, açıkçası, hatta zarif bir yolu, ama burada gibi görünüyor ben kullandım kod şimdiye kadar çalışıyor. Bu noktada

<%= f.label 'Albums' -%> 
<%= collection_select(:image, :album_ids, current_user.albums, :id, :name, {}, { :multiple => true }) -%> 

, ben "çalışma" demek, gerçekten kanıtı olabilir tüm sayfa hatasız oluşturacağını ve ben bir görüntü düzenlerken uygun albüm veya albüm seçildi olmasıdır. Hala çok farklı kaynaklardan gelen “tam” bir çözümü bir araya getirmenin ne kadar zor olduğuna şoke oldum.

15

select öğelerinin, Rails'in kafa karıştırıcı yönlerinden biri olduğunu düşünüyorum çünkü bunu yapmanın bir çok yolu olduğu söylendi.

bu deneyin:

<%= f.select(:album_id, @image.albums.all.collect {|a| [a.name, a.id]}) -%> 
+0

Yapmamla ilgili olarak birkaç noktayı düzelttim/vurguladım, ancak bu benim için işe yaramadı. Ben b/c yapmak zorunda kaldığım değişiklikler nedeniyle olabilir Ben yukarıda bazı kötü bilgi vardı. Şimdi sahip olduğum şey <% = f.select (: album_id, current_user.albums.collect {| a | [a.name, a.id]}) -%> '. Ben de ".all" named_scope ile çalıştım. –