2012-10-06 32 views
9

Tôi có một biểu mẫu để tạo tài liệu (tiêu đề, mô tả và nội dung - tất cả đều cơ bản). Biểu mẫu lưu các chi tiết này tốt nhưng nó không lưu user_id, mà phải là user_id của current_user. Làm thế nào để tôi làm điều này? Nó phải được dễ dàng nhưng không có gì đã làm việc cho đến nay.Cách thêm current_user vào user_id vào form_for trong đường ray?

def create 
    @material = Material.new(params[:material]) 
    if @material.save 
    flash[:success] = "Content Successfully Created" 
    redirect_to @material 
    else 
    render 'new' 
    end 
end 

Trả lời

10
def create 
@material = Material.new(params[:material]) 
@material.user_id = current_user.id if current_user 
if @material.save 
    flash[:success] = "Content Successfully Created" 
    redirect_to @material 
else 
    render 'new' 
end 
end 
+0

Cảm ơn. Thật tuyệt. – Finnjon

2

Giả sử bạn đang tiết kiệm đối tượng người sử dụng đăng nhập của trong current_user sau đây sẽ làm việc cho bạn

@material = Material.new(params[:material]) 
    @material.user_id = current_user.id 
    if @material.save 
3

Có một vài cách khác nhau để làm điều đó tùy thuộc vào cách bạn đã thiết lập ứng dụng của bạn. Nếu có một mối quan hệ giữa người sử dụng và tài liệu (tài khoản có nhiều vật liệu), bạn có thể sử dụng trong điều khiển của bạn:

def create 
    @material = current_user.materials.new(params[:material]) 
    # ... 
end 

Nếu bạn không có mối quan hệ đó, tôi sẽ vẫn khuyên bạn nên đặt nó trong bộ điều khiển trái ngược với một trường ẩn trong biểu mẫu. Điều này sẽ được an toàn hơn bởi vì nó sẽ không cho phép một người nào đó làm xáo trộn cho người sử dụng giá trị id:

def create 
    @material = Material.new(params[:material].merge(user_id: current_user)) 
    # ... 
end 
+0

Yeah Tôi đã suy nghĩ về việc thiết lập các hiệp hội. Tôi bị giữ lại bởi vì mặc dù người dùng tạo tài liệu nhưng có thể có một thời điểm khi nhiều người dùng tạo tài liệu và tôi không muốn giải quyết vấn đề đó. Cảm ơn mặc dù! – Finnjon

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