在我的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
答案 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