如何从第二模型的控制器更新一个模型的属性

时间:2015-06-29 18:26:49

标签: ruby-on-rails

在我的rails应用程序中,有一个名为Message的模型,另一个是Organization。在消息控制器中,数据被插入表消息中,保存的属性之一是在创建操作本身中计数的no_of_message。在organization表中有两个字段promo_limit和trans_limit。 如果sms_type是" TRANS"我想从no_of_message中减去trans_limit字段的值并更新它。 类似地,如果sms_type是" PROMO",则必须减去和更新promo_limit的值。 以下是message_params

收到的参数
 Parameters: {"utf8"=>"✓", "authenticity_token"=>"QHUDS5jfZNvPb4bnASyxjWgKwFaLF0/LSYUY+qHH/109e0xlLsxSsGUluCjVCeLBrK6ga6np64mHRlQ9sLSBbA==", "message"=>{"message_text"=>"sample message", "sms_type"=>"PROMO", "sendto"=>"Teaching", "sent_to"=>"34434343243, 7869851872", "organization_id"=>"4"}, "contact_nos"=>["34434343243, 7869851872"], "contact_no"=>["34434343243", "7869851872"]}

以下是创建动作

def create
    @message = Message.new(message_params)
    @message.no_of_message = @message.sent_to.try(:split,",").try(:count)
    @message.sent_to = message_params[:staff_type]

    respond_to do |format|
      if @message.save
        format.html { redirect_to @message, notice: 'Message was successfully created.' }
        format.json { render :show, status: :created, location: @message }
      else
        format.html { render :new }
        format.json { render json: @message.errors, status: :unprocessable_entity }
      end
    end
  end

1 个答案:

答案 0 :(得分:1)

Rails模型

Class Message
  belongs_to :organization

Class Organization
  has_many :messages

假设您的消息表在DB中有organization_id。 Rails关联将允许您创建/更新和检索关系对象。如果您的邮件属于某个组织,则在创建新邮件时,您需要将其分配给组织。在为组织分配组织之前,您需要知道要将消息附加到的组织的ID,或者您可以通过在对象上定义的任何字段检索组织对象。因此,如果您的组织中有一个名为name的唯一字段,您可以说

org =Organization.find_by_name("foo") 
@message.organization = org
if @message.save
  if params['sms_type'] == "TRANS"
    org.trans_limit = @message.no_of_message - org.trans_limit
  elsif params['sms_type'] == "BAR"
    #same thing for other business logic
  end
  org.save
end

关键是你必须根据用例的业务逻辑获得组织对象,然后你可以操作并保存它。

这是rails关联指南的链接 http://guides.rubyonrails.org/association_basics.html