2010-04-30 21 views
5

Tôi là một mô hình mà người dùng không được phép cập nhật hầu hết các trường sau khi tạo ban đầu.Rails sử dụng lại chế độ xem biểu mẫu trên chỉnh sửa, nhưng thiết lập một số trường chỉ đọc

Tôi đã nhìn thấy thuộc tính HTML :readonly Tôi có thể tack trên tất cả các trình trợ giúp trường, nhưng làm điều kiện trên tất cả các trường cảm thấy ... icky.

Tôi hiện không sử dụng bất kỳ thứ gì đặc biệt để tạo biểu mẫu của mình, chỉ đơn giản là HAML. Có ai biết cách làm tốt hơn không?

Đây là những gì tôi đã suy nghĩ làm việc đó cho đến nay:

def set_readonly?(object, html_attr) 
    html_attr.merge(object.new_record? ? {} : {:readonly => 'readonly'}) 
end 

Được sử dụng như:

f.text_field :supplier_id, set_readonly?(@damaged_goods, {:size => 5}) 

Các giải pháp để làm cho tôi drool sẽ là một cách để thiết lập một thuộc tính là đã đọc chỉ trên mô hình cùng với State Machine mà sau đó sẽ tuyên truyền cho các quan điểm. :)

Trả lời

2

Dưới đây là một cách để vô hiệu hóa một trường <INPUT> mà không trùng lặp hình thức helper của bạn trong newedit bạn lần xem:

f.text_field :supplier_id, readonly: f.object.persisted? 
-3

Sử dụng attr_protected (từ Bill Eisenhauer).

Kết quả đầu tiên từ Googling rails constants.

+3

'attr_protected' chỉ bảo vệ các giá trị từ đang được cập nhật trong cơ sở dữ liệu. Tôi không muốn người dùng của tôi dành thời gian cập nhật một trường để nó không lưu mà không có cảnh báo. :) Vì vậy, tôi muốn tìm một cách để thiết lập giá trị của chỉ đọc trên một trạng thái cụ thể và sau đó xem sẽ biết để thiết lập nó là chỉ đọc. Tôi đang ở thời điểm này bằng cách sử dụng helper 'set_readonly? 'Tôi đã viết trong phần câu hỏi. – gaqzi

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