【问题标题】:How to pass objects of one model to another in an index view?如何在索引视图中将一个模型的对象传递给另一个模型?
【发布时间】:2019-07-24 12:37:37
【问题描述】:

我正在使用 Hartl Rails 教程,对其进行修改以构建一个简单的论坛。感谢本教程,我有工作的用户模型/控制器/视图,允许登录和注销并跟踪当前用户。 我还有一个代表不同兴趣主题的“主题”模型。 User 模型的设置使得每个用户都有_many Topics。

我目前在我的主题索引视图中列出了 50 个主题,并希望在每个主题旁边显示一个复选框或按钮,以便用户可以单击并订阅该主题。

我找了好几个小时,不知道如何使用复选框将选中的主题添加到用户的主题列表中。我为这个宽泛的问题道歉,这是我最后的选择。

这就是主题和用户架构的样子:

create_table "topics", force: :cascade do |t|
    t.string   "topic_name"
    t.integer  "user_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.index ["user_id"], name: "index_topics_on_user_id"
end



create_table "users", force: :cascade do |t|
    t.string   "name"
    t.string   "email"
    t.datetime "created_at",      null: false
    t.datetime "updated_at",      null: false
    t.string   "password_digest"
    t.index ["email"], name: "index_users_on_email", unique: true
  end

我不确定这个问题还包括什么。我会密切关注以提供更多必要的信息。

【问题讨论】:

    标签: ruby-on-rails model-view-controller ruby-on-rails-5


    【解决方案1】:

    我认为您正在寻找的是 has_many_through 关联。基本上你会想要创建第三个模型UserTopics,当你提交表单时,你会为每个选中的复选框创建一个新的 UserTopic 实例。这里有更多关于此的信息:

    https://guides.rubyonrails.org/association_basics.html

    【讨论】:

    • @Tack 如果您不想要额外的模型,那么您可以使用has_and_belongs_to_many 关联。您可以按照此处的说明进行操作:guides.rubyonrails.org/…
    • @RatnamYadav 了解一个问题的多种解决方案总是好的! OP 应该知道这里最大的区别是,由于没有第三种模型,因此如果需要,无法添加额外的验证、回调等。如果这不是问题,那么这也是一个非常好的选择。
    • @vinyl 我选择了 has_and_belongs_to_many 关联,因为我不需要额外的验证或回调,但我不确定如何将它与表单一起使用来保存主题,因为它不是新模型.
    • @Tack 您可以使用多选字段或复选框。例如:<%= form_for @user do |f| %> <%= f.collection_check_boxes(:topic_ids, Topic.all, :id, :topic_name) %> <% end %>
    猜你喜欢
    • 1970-01-01
    • 2018-01-18
    • 2014-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多