如何更新数据在Rails中加入表4

我建立使用设计和惨惨轨道4的应用程序。当新用户注册时,他们不会被赋予默认角色。管理员必须通过管理面板手动分配。这就是我遇到困难的地方。我无法弄清楚如何更新连接字段中的数据。这是迄今为止我所拥有的。如何更新数据在Rails中加入表4

我UsersController:

class UsersController < ApplicationController 

before_filter :authenticate_user!

before_action :set_user, only: [:show, :update, :destroy]

def index

authorize! :index, @user, message: 'Not authorized as an administrator.'

@users = User.all

end

def show

end

def update

authorize! :update, @user, message: 'Not authorized as an administrator.'

if @user.update_attributes(user_params)

redirect_to users_path, notice: "User updated."

else

redirect_to users_path, alert: "Unable to update user."

end

end

def destroy

authorize! :destroy, @user, message: 'Not authorized as an administrator.'

unless @user == current_user

@user.destroy

redirect_to users_path, notice: "User deleted."

else

redirect_to users_path, notice: "Can't delete yourself."

end

end

private

def set_user

@user = User.find(params[:id])

end

def user_params

params.require(:user).permit(:name, :email, :role_id, :user_id)

end

end

而且我的榜样:

class Role < ActiveRecord::Base 

has_and_belongs_to_many :users, :join_table => :users_roles

belongs_to :resource, :polymorphic => true

scopify

end

我的用户模型:

class User < ActiveRecord::Base 

rolify

# Include default devise modules. Others available are:

# :token_authenticatable, :confirmable,

# :lockable, :timeoutable and :omniauthable

devise :database_authenticatable, :registerable,

:recoverable, :rememberable, :trackable, :validatable

end

正如你可以看到它的几乎是标准模型中产生由Devise。

而且这里是我使用更新的作用形式:

<div id="role-options-<%= user.id %>" class="reveal-modal medium" style="display: none;"> 

<%= simple_form_for user, url: user_path(user), html: {method: :put, class: 'custom' } do |f| %>

<h3>Change Role</h3>

<%= f.input :role_ids, collection: Role.all, as: :radio_buttons, label_method: lambda {|t| t.name.titleize}, label: false, item_wrapper_class: 'inline', checked: user.role_ids.first %>

<%= f.submit "Change Role", class: "small button" %>

<a class="close-reveal-modal" href="#">Close</a>

<% end %>

</div>

当我检查表单上的新角色,并提交它,我重定向到该消息的用户页面“用户更新“。但是,用户角色尚未更新。

我还是相当新的Rails,只是无法弄清楚到底是什么,我做错了。如果我理解正确,我需要更新user_roles表中的数据。我无法弄清楚我做错了什么。

回答:

您使用字符串参数,可以却忘了role_ids加入到允许的领域。

所以,你的控制器应包含这样的事情(如果role_ids是数组):

def user_params 

params.require(:user).permit(:name, :email, :role_ids => [])

end

或者,如果role_ids是标量,只是下降=> []一部分。

More info could be found here

回答:

我不知道rolify做什么。但我会这样做:

class User 

has_one :users_roles

has_one :role, through: :users_roles

虽然我不确定。但你可以试试看。我知道has_one :users_roles很奇怪。

以上是 如何更新数据在Rails中加入表4 的全部内容, 来源链接: utcz.com/qa/260005.html

回到顶部