Rails从另一个控制器更新模型

时间:2017-06-19 09:54:40

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

所以我有这2个模型,文件夹和事件。文件夹have_one事件和事件属于文件夹。

我希望能够在文件夹的同时使用新属性更新文件夹的事件。这样的事情。

def update
    respond_to do |format|
      if @folder.update(folder_params)
        @folder.event.update_attributes(status: @folder.status)
        format.html { redirect_to @folder, notice: 'Folder was successfully updated.' }
        format.json { render :show, status: :ok, location: @folder }
      else
        format.html { :edit }
        format.json { render json: @folder.errors, status: :unprocessable_entity }
      end
    end
  end

但是我知道这不是很符合MVC,也不行。关于如何使这项工作的任何想法?

提前致谢

2 个答案:

答案 0 :(得分:2)

您可以执行以下操作:

class Folder < ActiveRecord::Base

    after_save :update_event_status, on: update  #Or after_update :update_event_status

    def update_event_status
        event.update_attributes(status: status)
    end

end

答案 1 :(得分:1)

在Model中编写方法并在控制器方法中调用它。如下面的代码。

class Folder < ActiveRecord::Base

    def update_event_status(event,status)
        event.update_attributes(status: status)
    end

end


def update
    respond_to do |format|
      if @folder.update(folder_params)
        update_event_status(@folder.event,@folder.status) #call methode here
        format.html { redirect_to @folder, notice: 'Folder was successfully updated.' }
        format.json { render :show, status: :ok, location: @folder }
      else
        format.html { :edit }
        format.json { render json: @folder.errors, status: :unprocessable_entity }
      end
    end
  end

试试这个。