2011-09-15 45 views
7

Tôi có ứng dụng Rails 3 cần một số cài đặt do người dùng xác định. Tôi muốn sử dụng plugin https://github.com/ledermann/rails-settings này. Tôi có nó làm việc trong giao diện điều khiển đường ray. Nhưng tôi gặp khó khăn khi làm việc trong một hình thức. Tôi có sử dụng fields_for & attr_accessible không? Nếu vậy tôi không có may mắn.Cách tạo biểu mẫu cho plugin cài đặt đường ray

Tôi cần thêm các thiết lập cho hai mô hình: (. Trên đây hoạt động tốt đối với tôi trong giao diện điều khiển)

Ví dụ, cài đặt cụ thể cho người sử dụng,

user = User.find(123) 
user.settings.color = :red 
user.settings.color 
# => :red 

user.settings.all 
# => { "color" => :red } 

nhưng tôi cần quản lý chúng thông qua biểu mẫu web chuẩn. Tôi rất muốn biết người khác đang xử lý thế nào.

Cảm ơn.

Trả lời

13

Những gì tôi đã làm là thêm setters động/thu khí đến lớp tài khoản của tôi như vậy

class User < ActiveRecord::Base 

    has_settings 

    def self.settings_attr_accessor(*args) 
    args.each do |method_name| 
     eval " 
     def #{method_name} 
      self.settings.send(:#{method_name}) 
     end 
     def #{method_name}=(value) 
      self.settings.send(:#{method_name}=, value) 
     end 
     " 
    end 
    end 

    settings_attr_accessor :color, :currency, :time_zone 

end 

Với điều đó, bạn có thể sử dụng "màu" giống như bất kỳ thuộc tính khác của mô hình tài khoản của bạn. Cũng rất đơn giản để thêm các cài đặt khác, chỉ cần thêm chúng vào danh sách

+0

Câu trả lời hay - tôi hơi băn khoăn không biết làm thế nào để làm điều này và điều này hoạt động như một sự quyến rũ. Làm cho việc sử dụng các thiết lập đường ray rất sạch sẽ - cảm ơn rất nhiều! Các tác giả đá quý nên đăng bài này như là một ví dụ về Github Wiki của mình. Sự thay đổi duy nhất của tôi là làm cho hàm định nghĩa và hàm gọi riêng. – MikeH

+0

Mỗi khi tôi sử dụng điều này trong một biểu mẫu, như các biến thông thường, tôi nhận được: 'Không thể gán khối lượng thuộc tính được bảo vệ: màu, tiền tệ, múi giờ'. Bất kỳ ý tưởng? – toobulkeh

+1

Tôi tiếp tục gặp lỗi "số lượng đối số sai (0 cho 1)" khi tôi dùng thử – scientiffic

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