6

Điều này sẽ rất đơn giản. Tôi muốn lấy lại chuỗi tiếp theo của một chuỗi ... nó không phải là một giá trị mặc định ... nó không phải là một khóa chính ... nó không phải là một khóa ngoại. Trong một số ít trường hợp, tôi cần số thứ tự cho giá trị do người dùng cung cấp.Lấy phần tiếp theo từ một chuỗi bằng cách sử dụng activerecord trong Ruby on Rails 3.2.14/Ruby 2.0.0/PostgreSQL 9.2.4

Tôi đã thử những điều sau đây:

@nextid = ActiveRecord::Base.connection.execute("SELECT nextval('xscrpt_id_seq')") 

và những gì tôi nhận được lại là:

#<PG::Result:0x007fe668a854e8 @connection=#<PG::Connection:0x00000003aeff30>> 

Và bằng cách sử dụng

@nextid[0]["nextval"] 

tôi có thể nhận được giá trị đúng, nhưng nó dường như không đúng cách để tiếp cận vấn đề. Tôi đã tìm kiếm, tôi đọc "Pro Active Record", được sử dụng:

M_script.find_by_sql("SELECT nextval('xscript_id_seq')") 

nhưng, điều đó không hiệu quả.

Bất kỳ gợi ý nào về "chính xác" (Đường ray) để truy xuất giá trị tiếp theo từ một chuỗi trong ROR, sẽ rất được đánh giá cao!

Trả lời

5

Tôi tin

ActiveRecord::Base.connection.execute("SELECT nextval('xscrpt_id_seq')") 

sự là giải pháp đúng. Như tôi đã nói trong câu hỏi ban đầu của mình, tôi đã kiểm tra cuốn sách "Pro Active Record" và đó là giải pháp được đề xuất của họ. Tôi vẫn chưa biết chắc ActiveRecord đang tạo kết nối như thế nào, hoặc nếu có bất kỳ bảo trì nào tôi cần làm (chẳng hạn như đóng nó).

ActiveRecord đã từng sử dụng phương thức "next_sequence_number", nhưng phương thức đó đã không được chấp nhận.

7

Bạn có thể muốn sử dụng select_valuesequence_name:

Xscrpt.connection.select_value("select nextval('#{Xscrpt.sequence_name}')").to_i