0

2 つのモデルがUserありMotor、各テーブルにはname列があります。ユーザーが持っているすべてのモーターを表示するユーザーページがあります。

私がやった方法はname、テーブルの列がテーブルの列Motorと等しくなるようにすることでしたnameUser

Motor               User
name1               name1
name3               name2
name1               name3
name1               name4
name4               name5

のページを見ると、 という名前name1の のすべてのレコードが表示されます。Motorname1

しかし、テーブル内の名前を更新したい場合、Userテーブル内のすべてのレコードを変更するにはどうすればMotorよいuserですか?

name1like に変更した場合last1、すべてname1の をlast1tableMotorに変更するにはどうすればよいですか?

これは私のコントローラーshowメソッドです

def show
  @user = User.find(params[:id]) 
  @motor = Motor.where(:name => @user.name)
end

update次に、方法を変更する必要があると想定しています

if @user.update_attributes(params[:user])
  if params[:name]
  # whats the correct way of changing all records that was previously the same name as user in the motor table?
  end
end

ありがとう

4

2 に答える 2

0

あなたがやっている方法は、関連付けを活用していません。あなたのモデルはどのように見えますか? 私は彼らが次のように見えるべきだと思います:

class User < ActiveRecord::Base
  has_many :motors
end

class Motor < ActiveRecord::Base
  belongs_to :user
end

after_saveこれがセットアップされると、コールバックに結び付けることができます。

class User < ActiveRecord::Base
  has_many :motors

  after_save :update_names

  private

  def update_names
    self.motors.each do |motor|
      motor.name = self.name
    end
    self.save!
  end
end

Userと の間に関連性がない場合Motorは、古い名前のすべてのモーターを見つけて名前を変更することで、おそらく力ずくで解決できます。

old_user_name = @user.name
@user.name = params[:name]

@motors = Motor.where(name: old_user_name).all
@motors.each do |motor|
  motor.name = params[:name]
  motor.save!
end
于 2013-10-18T06:19:48.850 に答える