Cần sự giúp đỡ từ những lập trình viên Rails có kinh nghiệm

Chào mọi người, mình hiện tại là giao viên tiếng Anh. Mình đang tự học Rails (được 5 tháng) để làm startup. Tuy nhiên, hiện tại mình đang gặp một vấn đề về search trong rails, mình đã cố gắng search khắp trên internet (stackoverflow, google, rails forum, và cả trên trang daynhauhoc) nhưng vẫn chưa tìm ra giai pháp. Nếu bạn nào có kinh nghiệm về Rails thì có thể giup mình trong vấn đề này được không? Và nếu như muốn làm startup ở Việt Nam thì có thể thảo luận cùng với mình.
Xin vui lòng liên lạc qua số điện thoại của mình: 1215175815. Cám ơn các bạn đã đọc. :slight_smile:

Em thì đang học rails thôi :stuck_out_tongue:, nhưng với các hệ thống tìm kiếm thì người ta sẽ tách thành một hệ thống độc lập để đảm bảo về hiệu suất, thông thường sử dụng Elasticsearch hoặc các giải pháp tương tự, đặc biệt là khi cho phép các query phức tạp.

Cám ơn bạn đã đóng góp ý kiến. Mình đã thử sử dụng elasticsearch(searchkick), solr, sunspot, và bây gio là pg search dành cho postgresql nhưng vẫn bị vấn đề. Bạn có kinh nghiệm về search multi models không? Nếu có thể thì mình cùng nhau trao đổi. :slight_smile:

À em cũng chưa làm gì phải đụng đến tìm kiếm phức tạp lắm :sweat_smile:, hóng cao nhân vậy.

Ok, cám ơn bạn đã quan tâm. Mà mình có 1 thắc mắc là bạn tự học như thế nào? Qua internet hay là tới trung tâm.

Tại mình biết ở Sài Gòn thì chỉ có pingo ở ĐH BK dạy Rails, còn Hà Nội thì có techmaster. Mà trang web của pingo mình mới vào hôm qua thì thấy không còn nữa. Hơn thế nữa mình nghĩ rails là framework cũng khá hữu dụng mà tại sao có qúa ít nơi dạy, đặc biệt là ở Sài Gòn, một trọng những nơi phát triển nhất về công nghệ ở Việt Nam.

Mình thì tự học bằng cách search tất cả các khóa học trên internet mà mình có thể kiêm được kể cả youtube và torrent, nhưng đa số đều dạy cơ bản. Đôi khi có những vấn đề mình cần phải trực tiếp hỏi một ai đó thì học qua internet lại không thể giúp được.
Đây là github của mình, nếu bạn có nhã hứng thì có thể vào xem và đóng góp ý kiến cho mình:

1 Like

Rails em cũng newbie thôi anh, học ruby vật cả ra mà ko nhớ được bao nhiêu cả :joy:.

Ruby thì em học trên rubymonk.com với lại đọc sách (Programming ruby - The pragmatic programmer).

Rails thì em học một vài khóa trên mạng. Khóa của berkeley này dạy song song rails và agile, phần sau dạy về javascript Phần 1 Phần 2 (cũng dừng lại ở cơ bản thôi, nhưng khá hay) với lại em đang bắt đầu đọc sách Agile Web Development with Rails 4.

Trước mắt của em là như thế :sweat_smile:.
Tổng quát chung về việc phát triển ứng dụng web (từ backend -> front end, security, scaling…) anh có thể học khóa này của stanford (xem slide) http://web.stanford.edu/~ouster/cgi-bin/cs142-winter15/lectures.php

Còn về phát triển web nói chung thì anh có thể lên https://news.ycombinator.com/best đọc tin mỗi ngày (mỗi ngày!), hoặc reddit /r/ruby /r/rails /r/webdev để cập nhật tin. Đó là đối với những ai muốn đi sâu vào dev thôi, còn anh thì có thể không cần thiết.

2 Likes

Ok, cám ơn bạn. Mình vừa chat với 1 anh bạn ở trên stackoverflow về vấn đề của mình mà ảnh cũng bó tay. :frowning:

Những tài liệu ở trên mình đã xem qua. Nói chung vẫn là cơ bản. Nếu áp dụng vào 1 vấn đề cụ thể hoặc 1 gem cụ thể thì mình nghĩ phải cần đến 1 tutor riêng thì mới giai quyết được hoặc nâng cao khả năng code.

Về phần Y combinator và reddit thì mỗi tuần mình vào đó ít nhất 1 lần. Với lại techcrunch nữa. Nếu đam mề về startup thì nhất định không bỏ qua mấy trang đó. Nhưng mà mình vẫn muốn bắt tay vào làm 1 cái startup thật sự chứ đọc thành công của người khác hoài thì cũng stress lắm. Mình cũng hy vọng là một ngày nào đó cũng được lên techcrunch. Hehe… :))

Nâng cao thì chỉ có sách và các bài diễn thuyết ở hội nghị thôi anh :sweat_smile:, viết tuts không nhiều lắm. Ví dụ như cái ruby conf mới tổ chức http://rubyconf.org/program hoặc railsconf http://confreaks.tv/conferences/railsconf. Weekly newsletter thì có cái http://rubyweekly.com
Mà em chưa biết anh gặp vấn đề gì mà ko giải quyết được nhỉ, elasticsearch có tìm kiếm nhiều models mà.

Bạn có thể mô tả rõ hơn là bạn muốn search kiểu gì không (nghe có vẻ giống narrow search)? Chứ mình chưa thấy trường hợp nào mà elastic_search không làm được cả.

Đúng là như vậy nhưng mà khi implement nó thì mình gặp vấn đề. Nay mình chuyển sang dùng pg search. Hiện tại thì đã ổn, không biết tương lai thì như thế nào. :))

Cám ơn bạn đã quan tâm. Hiện tại thì mình chuyển sang dùng pg search.
Trước đó mình dùng gem searchkick thì bị vấn đề, nếu bạn có thể giup mình thì mình sẽ quay lại sử dụng searchkick vì mình thấy tốc độ xử lý của nó rất nhanh.
Vấn đề của mình là: homepage của mình cho phép user search tên trường học và tên giao viên, và dùng chung 1 form search. Mình có 2 tables là school và teacher. One school has many teachers và teacher belongs to school. Vậy bây giờ nếu mình dùng chung một cái form search thì mình có nên thay đổi relationship của teacher và school hay là mình nên tạo 1 cái table mới để join kết qủa search của teacher và school lại?

Hồi trước thì mình cho user tìm kiếm tên trường học trước, sau đó họ sẽ vào trường học và tìm kiếm tên giao viên, nhưng mà kết qủa nó trả lại thì là tên của tất cả giao viên chứ không phải là tên giao viên mà mình muốn tìm. Thêm vào đó, mình thấy như vậy qúa mất công vì phải bắt user search 2 lần. Cho nên mình mới muốn là cho user search tên trường hoặc tên giao viên cùng 1 lúc. Nhưng kiến thức về backend của mình còn hạn chế qúa nên chưa tìm ra giai pháp. Không biết là bạn có bao gio gặp vấn đề tương tự chưa? Hay bạn có biết resources nào cũng áp dụng searchkick như trường hợp của mình không? Bạn có thể cho mình đường link, mình sẽ tự đọc và tìm hiểu. :slight_smile:

Hi bạn, yêu cầu của bạn gần giống narrow search (thực chât của bạn là search trên các model có relationship với nhau, ở đây là trường học vs giáo viên, quan hệ 1-n). Bản chất của elastic-search là đánh index nên index thuộc về flat-world (dữ liệu phẳng, chẳng còn relationship với nhau nữa).

Ưu điểm:

  • Đánh index nhanh, search cũng nhanh (vì không bị lock bảng, giả sử nếu bạn thiết lập relationship, giả sử muốn xóa trường học, ví dụ DHBK, vậy thì toàn bộ giáo viên của DHBK sẽ bị orphan. Cái này bạn tìm hiểu thêm về CSDL quan hệ và nguyên tắc ACID của nó).
  • Một số lượng lớn index có thể chuyển qua nhiều node rất nhanh, do các document (index) là độc lập. ES support cluster nên vấn đề này khá được coi trọng (cluster giúp bạn search trên nhiều node, giúp phân tải nhanh và scale đơn giản).

Vấn đề của bạn có 1 số hướng giải quyết sau:

  • Nested Object: giờ trong entity School, bạn nhét Collection của Teachers vào, rồi mới index qua ES. Ưu điểm: search được kiểu bạn muốn. Nhược điểm: Document lẫn Entity siêu to (bạn tưởng tượng 1 School có khoảng vài trăm Teacher, mỗi Teacher lại có hàng trăm properties khác nhau)
  • Sử dụng Parent-Child Relationship: thay vì embeded cả đống Childs vào, bạn embed cái ID của nó thôi. Hai entities này vẫn độc lập ở 2 document khác nhau. Ưu: Parent có thể được index lại mà không cần index children (parent index lại đống childID. Nhược: tốn thêm 1 queries để search IN (childID)
  • Denormailize: Cách làm này ngược với nested object, nghĩa là nhét thằng cha vào entities của thằng con. Ví dụ bạn có PUT /ind/school/1 { "name":"DHBK" }, giờ có PUT /id/teacher/1 {"name":"hoang", "school" {"id":"1", "name":"DHBK"}}. Nhét 1 phần thôi, chủ yếu là tên vì thường người dùng chọn search tên trường trước, sau mới search tên thầy giáo. Ưu: cũng khá nhanh. Nhược: vẫn phải seach trên 2 document.
  • Search-side joins: giả lập JOIN của RDBMS, ví dụPUT /ind/school/1 { "name":"DHBK" }, giờ có PUT /id/teacher/1 {"name":"hoang", "school_id":"1"}. Đây là cách làm thông dụng nhất (và mọi người cũng hay làm. Muốn search các teacher của DHBK
    GET /ind/teacher/_search
    {
      "query": {
        "filtered": {
          "filter": {
            "term": { "school_id": 1 }
          }
        }
      }
    }

B1: Phải search ra school -> map với school_id (nếu muốn search tên thầy trên một vài trường thì phải lấy ra mảng school_ids)-> gọi ES search tên thầy với thêm một filter nữa: “term”: { “school_id”: 1 } (hoặc dùng MIXINS nếu ra mảng của school_ids)


Hy vọng giúp được bạn. Ping mình nếu cần trao đổi thêm nhé.
p/s: DNH không support embeded code à? Hic

4 Likes

Mình cũng không rõ UI của bạn thế nào. Chứ với việc có 2 ô EditText, và người dùng đều gõ được cả 2 nghe chừng không được friendly cho lắm. Mình gợi ý là bạn dùng suggested edittext.

1- Ô1: cho gõ tên trường, khi đó mình dùng ajax gợi ý người dùng (giống google vậy) các trường học có tên chứa cái text đó. Họ chọn, lấy school_id ra. Còn nếu muốn include nhiều trường, cũng gợi ý, nhưng thay vì hiển thị trên ô, mình cho vào một tag-groups phía dưới (cái này làm giống ITviec ý)
2- Ô2: bây giờ mới search tên thầy giáo khi đã lấy được school_id phía trên (hoặc school_ids nếu search nhiều trường học).

Thân.

1 Like

Mình không làm Ruby nhưng muốn hỏi các cao thủ Ruby thì Join vào đây để hỏi http://chat.ruby.org.vn/

1 Like

Cám ơn câu trả lời chi tiết của bạn. Hiện tại mình đang bận làm 1 dự án khác, khi nào xong mình sẽ làm theo gợi ý của bạn. Nếu có gì không hiểu mình sẽ hỏi bạn. Cám ơn bạn nhiều lắm. ^^

Cám ơn bạn. Mình sẽ bookmark nó. 1 ngày vui vẻ nhé. :slight_smile:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?