У меня есть приложение, позволяющее пользователю заполнить форму (с названием «контрольный список»), а затем составить список задач, которые он должен будет выполнить. Задачи (называемые «советы») связаны с ответами, которые пользователь дал в форме. Например, если у вас вопрос, «вы приготовили обед?» и пользователь отвечает «нет», тогда будет показан совет «пообедать».Рельсы объединения пользователей, форм и задач
Как только совет будет сделан, пользователь может пометить его как выполненный. Советы одинаковы для всех пользователей. Они уже созданы в приложении администратором.
Таким образом, у пользователей есть контрольный список, контрольный список принадлежит пользователю.
Проблема, с которой я сталкиваюсь: когда пользователь отмечает, что совет завершен, он помечается как завершенный для всех пользователей. Этого не должно быть.
Я не уверен, как это исправить. Ассоциации «Has-many» и «Belongs_to» между советами и пользователями не должны работать, так как пользователь не создает советы?
Я новичок в рельсах, поэтому я был бы счастлив, если бы кто-то мог помочь. Обратите внимание, что я использую Devise для управления пользователями.
схемы:
ActiveRecord::Schema.define(version: 20160407143608) do
create_table "advices", force: :cascade do |t|
t.string "name"
t.text "content"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "category_id"
t.boolean "status"
t.string "linkname1"
t.text "link1"
t.text "link2"
t.string "linkname2"
t.text "link3"
t.string "linkname3"
t.integer "ref"
t.boolean "completed"
end
create_table "categories", force: :cascade do |t|
t.string "name", null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "checklists", force: :cascade do |t|
t.boolean "facebook"
t.boolean "twitter"
t.boolean "linkedin"
t.boolean "viadeo"
t.boolean "instagram"
t.boolean "community"
t.boolean "cms"
t.boolean "seo"
t.boolean "crowdfunding"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "user_id"
end
add_index "checklists", ["user_id"], name: "index_checklists_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
end
add_index "users", ["email"], name: "index_users_on_email", unique: true
add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
end
Модели:
class Advice < ActiveRecord::Base
belongs_to :category
end
class Checklist < ActiveRecord::Base
belongs_to :user
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 :checklists
end
Вид:
<%= advice.name %> | <%= link_to "Completed", complete_advices_path(advice), method: :put %>
контроллер:
def complete
@advice.completed = true
@advice.save
redirect_to root_path
end
Благодарим вас dmetheny для вашего ответа. hmm, я создал модель объединения и добавил новые ассоциации в user.rb и advice.rb. Но я действительно не понимаю, что делать дальше. У вас есть пример? – Ryley38
@ Ryley38 добавил некоторые изменения. Я могу объяснить, если понадобится. – toddmetheny
Я также добавил некоторые изменения. Спасибо за эти подробности. Да, я намеревался отобразить совет, если завершенное логическое значение «ложно». В настоящее время, щелкнув ссылку в представлении, пользователь вызывает «полное» действие, которое изменяет значение булева. Итак, это действие должно создать запись user_advice? Извините за новый вопрос, но какой способ создать его с помощью действия? – Ryley38