Rails 4 has_many through:从父模型编辑视图更新连接模型

时间:2015-11-13 15:55:56

标签: ruby-on-rails forms ruby-on-rails-4 has-many-through jointable

在我的Rails 4应用程序中,我有以下模型:

class User < ActiveRecord::Base
  has_many :administrations
  has_many :calendars, through: :administrations
end

class Calendar < ActiveRecord::Base
  has_many :administrations
  has_many :users, through: :administrations
  has_many :posts
end

class Administration < ActiveRecord::Base
  belongs_to :user
  belongs_to :calendar
end

我主要使用Administration联接模型为每个role中的每个user定义calendar

因此,当user创建calendar时,或当用户加入日历时,会在Administration模型中使用user_id创建新行, calendar_id和关联的role

所有这些都得到了照顾。

我也知道如何删除user或删除calendar,由于两个模型中都添加了dependent: :destroy选项,因此会自动删除所有相应的管理。

现在,我感兴趣的是如何在此特定日历role视图中更新给定user的{​​{1}}的{​​{1}}。

注意:在这种特殊情况下,calendar edit设置为编辑查看器,并且可以只能更新到其他选项。

到目前为止,我已构建此表以显示user role users的{​​{1}}列表:

belong_to

我现在正在努力的是如何实现编辑角色功能。

我是否应该插入一种&#34;内联形式&#34;有两个单选按钮 - 一个用于编辑器,另一个用于查看器 - 默认选中当前角色?

或者我应该使用带有JS警报的calendar路线?

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:1)

1)获取处理此问题的方法:

user.rb

def update_role(role)
  self.update_attributes(:role, role)
end

2)获取控制器动作来处理这个问题:

users_controller.rb

class UsersController << ApplicationController
  def update_role
    @user = User.find(params[:id])
    @user.update_role(params[:role)
  end
end

3)获取控制器操作的路径

route.rb

get "user/role/update" => "user#update_role"

4)指出你的radio_buttons&#39;形成这个控制器动作

<%= form_tag (url: "user/role/update" id: user.id), remote: true do %>

并将role的单选按钮放在此表单中,每个单元都有不同类型的角色。

注意 因为您已经熟悉了大部分内容的工作原理,所以没有给出很多细节,只是关于如何处理这个问题的一些指示。

希望这会有所帮助......