2012-10-27 21 views
10

Hãy tưởng tượng tôi có các mô hình sau:Có cách nào dễ dàng hơn trong việc tạo/chọn dữ liệu liên quan với ActiveAdmin không?

class Translation < ActiveRecord::Base 
    has_many :localizations 
end 

class Localization < ActiveRecord::Base 
    belongs_to :translation 
end 

Nếu tôi làm điều này trong ActiveAdmin:

ActiveAdmin.register Localization do 
    form do |f| 
    f.input :word 
    f.input :content 
    end 
end 

Hiệp hội cho chữ sẽ chỉ cho phép tôi để lựa chọn từ ngữ hiện có. Tuy nhiên, tôi muốn có tùy chọn tạo từ mới khi đang bay. Tôi nghĩ rằng nó có thể hữu ích để chấp nhận các thuộc tính lồng nhau trong mô hình bản địa hóa (nhưng sau đó, tôi sẽ chỉ có tùy chọn tạo một từ, không chọn từ các từ hiện có). Làm thế nào tôi có thể giải quyết vấn đề này?

+0

Trong ActiveAdmin của bạn như thế nào bạn muốn để xác định đó là dịch hiện tại - chọn nó từ menu hoặc lưu trữ trong params (thông qua url)? –

+0

Tôi có thể chọn từ menu hoặc tạo bản dịch mới và bản địa hóa mới (tất cả cùng một lúc) – Geo

Trả lời

10

Tôi nghĩ bạn có thể thử sử dụng thuộc tính ảo cho

Ví dụ này (không kiểm tra)

class Localization < ActiveRecord::Base 
    attr_accessor :new_word #virtual attribute 
    attr_accessible :word_id, :content, :new_word 
    belongs_to :translation 
    before_save do 
    unless @new_word.blank? 
     self.word = Word.create({:name => @new_word}) 
    end 
    end 
end 

Ý tưởng chính là tạo ra và lưu trữ dụ Word mới trước khi lưu nội địa hóa và sử dụng nó thay vì word_id từ menu thả xuống.

ActiveAdmin.register Localization do 
    form do |f| 
    f.input :word 
    f.input :content 
    f.input :new_word, :as => :string 

    end 
end 

Có là rất tốt ray-cast về thuộc tính ảo http://railscasts.com/episodes/167-more-on-virtual-attributes

Các vấn đề liên quan