Diese Zeile löst den Fehler "falsche Anzahl der Argumente (1 gegeben, erwartet 0)" aus. Ich würde wirklich gerne wissen, wie diese Abfrage funktioniert. Vielen Dank!Warum bekomme ich eine Fehlermeldung "falsche Anzahl von Argumenten (1, erwartete 0)" für eine Suchabfrage in Rails?
@posts = Post.all(:joins => :course, :conditions => "course.name in (#{@user.courses.map(&:name).join(',')})",:order => "posts.created_at DESC")
Dies ist Code in meinem Controller:
@user = current_user
@posts = Post.all(:joins => :course, :conditions => "course.name in (#{@user.courses.map(&:name).join(',')})",:order => "posts.created_at DESC")
Hier sind die Modelle:
class Post < ActiveRecord::Base
belongs_to :user
belongs_to :course
has_many :comments
end
class Course < ActiveRecord::Base
belongs_to :user
has_many :posts
belongs_to :major
end
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :courses
belongs_to :major
has_many :posts
has_many :comments
accepts_nested_attributes_for :courses, reject_if: :all_blank, allow_destroy: true
end
Und hier ist das Schema
create_table "comments", force: :cascade do |t|
t.text "comment"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "user_id"
t.integer "post_id"
end
add_index "comments", ["post_id"], name: "index_comments_on_post_id"
add_index "comments", ["user_id"], name: "index_comments_on_user_id"
create_table "courses", force: :cascade do |t|
t.string "name"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "major_id"
t.integer "user_id"
end
add_index "courses", ["major_id"], name: "index_courses_on_major_id"
add_index "courses", ["user_id"], name: "index_courses_on_user_id"
create_table "majors", force: :cascade do |t|
t.string "name"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "posts", force: :cascade do |t|
t.string "title"
t.text "content"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "user_id"
t.integer "course_id"
end
add_index "posts", ["course_id"], name: "index_posts_on_course_id"
add_index "posts", ["user_id"], name: "index_posts_on_user_id"
create_table "users", force: :cascade do |t|
t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false
t.string "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.integer "sign_in_count", default: 0, null: false
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.string "current_sign_in_ip"
t.string "last_sign_in_ip"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.boolean "admin"
t.string "username"
t.integer "major_id"
end
add_index "users", ["email"], name: "index_users_on_email", unique: true
add_index "users", ["major_id"], name: "index_users_on_major_id"
add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
add_index "users", ["username"], name: "index_users_on_username", unique: true
end
Das den Fehler nahm weg von der Abfrage, das ist toll! Aber ich habe jetzt einen Fehler auf "@ posts.each do", die besagt, dass "Association namens 'Kurse' nicht auf Post gefunden wurde;" – Ryan
Dies ist ein Problem mit dem Assoziationsnamen, der in includes verwendet wird (in Referenzen ist es korrekt, da diese Methode den Tabellennamen erwartet!), Sollte es Kurs statt Kurs sein, da es ein Eins-zu-Viele ist Posts) Beziehung. Ich habe den Tippfehler behoben. Außerdem konnte ich die Abfrage noch nicht vollständig verifizieren, da ich gerade mobil bin. – joaovictortr
Es gibt diesen Fehler: SQLite3 :: SQLException: nahe "Netzwerke": Syntaxfehler: SELECT "Beiträge". "ID" AS t0_r0, "Beiträge". "Titel" AS t0_r1, "Beiträge". "Inhalt" AS t0_r2, "posts". "created_at" AS t0_r3, "Beiträge". "updated_at" AS t0_r4, "Beiträge". "user_id" AS t0_r5, "Beiträge". "course_id" AS t0_r6, "Kurse". "id" AS t1_r0, "Kurse". "Name" AS t1_r1, "Kurse". "created_at" AS t1_r2, "Kurse". "updated_at" AS t1_r3, "Kurse". "major_id" AS t1_r4, "Kurse". "user_id" AS t1_r5 FROM "posts" LEFT OUTER JOIN "Kurse" ON "Kurse". "id" = "Beiträge". "course_id" WHERE (Kurse.Name IN (Electrical Networks, Physik 3)) – Ryan