2012-03-13 28 views
12

A Userhas_oneAccount. Khi thiết lập attr_accessible trên Mô hình người dùng, tốt hơn là bảo vệ :account, :account_id hoặc cả hai?Đường ray attr_accessible: đối tượng vs: object_id

attr_accessible :account 

hoặc

attr_accessible :account_id 

hoặc

attr_accessible :account, :account_id 

tôi cảm thấy như cả hai là con đường để đi (vì nó là an toàn hơn) mặc dù nó cảm thấy ít DRY.

Update để cung cấp thêm nền

Chỉ cần để cho một chút nền thêm về lý do tại sao tôi yêu cầu. Tôi, giống như hầu hết các ppl, thấy những gì đã xảy ra với Github vì vậy chúng tôi đang đi qua ứng dụng của chúng tôi và khóa nó xuống một chút chặt chẽ hơn.

Trong quá trình thực hiện điều này tôi thấy các xét nghiệm trong đó chúng ta vượt qua trong tài khoản

User.create account: account

và nơi chúng tôi đi qua trong ACCOUNT_ID:

User.create account_id: account.id

lựa chọn của tôi là một trong hai thay đổi tất cả chúng đều là đồng nhất hoặc thay đổi attr_accessible để cho phép. Tôi quyết định thay đổi tất cả để trở thành người kiên định. Nhưng điều này khiến tôi lo lắng rằng chúng tôi có lẽ đang sử dụng cả hai phương pháp trong suốt ứng dụng của mình và tôi có thể phá vỡ ứng dụng của chúng tôi bằng cách chỉ cho phép một ứng dụng hoặc một ứng dụng khác.

Tôi đã làm lỗi chính tả khi tôi nói sử dụng cả hai đều an toàn hơn. Đó là một ngày dài.

+0

Bạn có đang sử dụng 'accept_nested_attributes_for' không? – tadman

+0

Nếu câu trả lời cho câu hỏi của tôi phụ thuộc vào câu trả lời cho câu hỏi của bạn, tôi rất muốn xem lý do và câu trả lời trong cả hai trường hợp. – pcg79

+0

Nếu bạn đang sử dụng 'accept_nested_attributes_for: account' thì đường ray sẽ tự động thử áp dụng và' params [: user] [: account_attributes] 'khi nó tạo hoặc cập nhật của bạn. Trong trường hợp này, bạn cũng sẽ cần phải thêm 'attar_accessible: account_attributes' – rwc9u

Trả lời

7

Không có câu trả lời đúng cho điều này, mặc dù điều đó phụ thuộc vào cách bạn định cập nhật người dùng này. attr_accessible :account sẽ cho phép bạn hàng loạt gán tài khoản trực tiếp như thế này:

user.update_attributes(:account => account) 

hữu ích nếu bạn đã có một đối tượng tài khoản mà bạn muốn liên kết cho người sử dụng cùng với rất nhiều các thuộc tính khác. Mặt khác, attr_accessible :account_id sẽ thích hợp hơn nếu bạn đã gán ID của tài khoản, kể từ một thả xuống hoặc một số yếu tố hình thức khác:

user.update_attributes(params[:user]) # params[:user][:account_id] is a part of this hash 

trường hợp sau này thường được coi là nguy hiểm hơn và là một phần của vấn đề với Vấn đề bảo mật gần đây của Github: bạn có thể đăng bất kỳ tài khoản nào mà bạn thích, bao gồm cả tài khoản không thuộc về bạn và người dùng của bạn sẽ được gán cho tài khoản đó. Vì vậy, tổng thể tôi sẽ đi cho cựu và làm một look-up để đảm bảo tài khoản là một trong những bạn mong đợi, nhưng như tôi đã nói lúc đầu, bạn có thể đi một trong hai cách trên này tùy thuộc vào cách bạn định sử dụng nó.

0

Bạn không muốn đặt attr_accessible :user hoặc attr_accessible :user_id trong tài khoản của mình.rb, giả sử rằng một tài khoản belongs_to :user.

Ngoài ra, attr_accessible là danh sách trắng rõ ràng.Tôi không thấy cách attr_accessible :user, :user_id sẽ an toàn hơn attr_accessible :user.

+0

Thành thật mà nói cụ thể nếu những gì đi vào mô hình nào, là không liên quan. Đó là một câu hỏi chung trong đó là tốt hơn. Và có, tôi có lẽ đã bỏ lỡ khi tôi nói sử dụng cả hai đều an toàn hơn. Tôi sẽ thêm một số chi tiết trong câu hỏi ban đầu của tôi. – pcg79

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