2012-05-02 28 views
5

trong một bộ điều khiển Tôi có một hành động tạoRails vượt qua tham số bổ sung cho một mô hình

def create 

    params[:note] 
    @note = current_user.notes.new(params[:note]) 

     if @note.save 
     respond_with @note, status: :created 
     else 
     respond_with @note.errors, status: :unprocessable_entity 
     end 
    end 

Tôi muốn vượt qua các mô hình param khác gọi CURRENT_USER, làm thế nào để làm điều đó và làm thế nào để truy xuất các param thông qua trong một phương pháp mô hình?

+0

để mà mô hình làm y Bạn muốn chuyển thông số đó? – MrDanA

Trả lời

3
@note = Note.new(params[:note].merge(:user_id => current_user.id)) 

Nhưng có lẽ đây không phải là cách tốt nhất làm thế nào bạn làm điều đó, xem xét điều này: Adding variable to params in rails

Nếu bạn muốn truy cập vào CURRENT_USER trong mô hình, xem: Rails 3 devise, current_user is not accessible in a Model ?

+1

Bạn không cần phải 'hợp nhất' khi bạn chỉ có thể gán trực tiếp:' params [: note] [: user_id] = current_user.id' Hãy nhớ rằng 'merge' trả về một bản sao, do đó, nó không thay đổi các tham số nhưng thay vào đó, hãy trả về phiên bản có các mục nhập bổ sung. – tadman

+0

Cảm ơn bạn đã làm rõ. Khi tôi viết câu trả lời, tôi muốn sử dụng 'merge' khi gọi 'new'. tức là: 'Note.new (params [: note] .merge (: user_id => current_user.id))' Nó có đúng không? –

+0

Điều đó có ý nghĩa vì bạn sử dụng kết quả. 'merge' trong một ngữ cảnh void là hầu như luôn vô nghĩa. – tadman

1

Thông thường bạn làm điều đó với một hidden_field.

Vì vậy, trong chế độ xem tạo, bạn sẽ thêm current_user làm trường ẩn.

<%= form_for @note do |f| %> 
    # all your real fields 
    <%= f.hidden_field :current_user current_user %> 
<% end %> 

Sau đó, trong tạo params điều khiển [: note] [: CURRENT_USER] sẽ được xác định, và thêm vào mô hình của bạn, giả sử mô hình của bạn có một thuộc tính gọi là 'CURRENT_USER'

+5

Trong khi thêm các trường ẩn tùy chỉnh có thể hữu ích, tôi sẽ không cho current_user. Người dùng độc hại quá dễ dàng thay đổi nội dung của biểu mẫu trước khi gửi. Bây giờ bạn đã có một bản ghi trong bảng của bạn mà nói rằng Bob đã làm một cái gì đó, khi thực sự nó đã được Alice ... Di chuyển nó vào bộ điều khiển như đề nghị của Mikhail. – Unixmonkey

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