tôi có một cái nhìn về dự án hiện tại của tôi mà làm điều gì đó như sau (trong Haml):Tạo id HTML duy nhất trong Rails khi sử dụng một phần lặp đi lặp lại rằng có form_for
[email protected] do |horse|
= render :partial => 'main/votingbox', :locals => {:horse => horse}
Các trong _votingbox.html. tập tin Haml tôi có như sau:
%div.votingbox
%span.name= horse.name
%div.genders
- if horse.male
%img{:src => 'images/male.png', :alt => 'Male'}
- if horse.female
%img{:src => 'images/female.png', :alt => 'Female'}
%div.voting_form
= form_for(Vote.new, {:url => horse_vote_path(horse)}) do |f|
= f.label :comment, "Your opinion"
= f.text_field :comment
...
a bunch of labels and input elements follow generated using the form helpers
Điều này sẽ tạo ra mã làm việc nhưng nó tạo ra các forms với id tương tự cho tất cả các yếu tố hình thức mà làm cho HTML mất hiệu lực khi votingbox phần được trả lại lần thứ hai.
Đoán đầu tiên của tôi khi sửa lỗi này là chỉ định duy nhất: id thành form_for nhưng chỉ áp dụng cho thẻ biểu mẫu được tạo bởi form_for chứ không phải bất kỳ thẻ nào trong khối form_for.
Một giải pháp xác định cho vấn đề này là đi qua và xác định thủ công các id duy nhất của riêng tôi trên form_for và tất cả các phần tử biểu mẫu mà tôi sử dụng. Đây là công việc nhiều hơn tôi đã hy vọng.
Có cách nào dễ dàng hơn hoặc sạch hơn để có được các id duy nhất ở định dạng tương tự như cách Rails hiện đang tạo chúng trên tất cả các phần tử biểu mẫu của tôi không?
get_vote trong trường hợp này sẽ luôn trả về 'Vote.new' sẽ là đối tượng ActiveRecord chưa được lưu. Tôi đã sửa đổi câu hỏi gốc cho phù hợp. Điều gì lý tưởng ở đây là nếu tôi có thể tạo các id biểu mẫu dựa trên id của đối tượng ngựa. Trong trường hợp này, id cho biểu mẫu sẽ là 'vote_new_1' khi phần đó được hiển thị cho đối tượng Ngựa có id 1. – cyberkni
Tôi đã cập nhật câu trả lời, vui lòng xem. – edgerunner
Tôi đề nghị: ': id => dom_id (ngựa, 'bỏ phiếu')' để phát triển 'horse_123_vote'. Nó dễ đọc hơn. – Ariejan