首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails嵌套属性Id保存而不是项

Rails嵌套属性Id保存而不是项
EN

Stack Overflow用户
提问于 2014-05-12 19:57:00
回答 1查看 35关注 0票数 0

因此,在我正在构建的这个小rails应用程序中,我有一个嵌套形式的自由职业者和行业。问题是,当我试图创建一个新的自由职业者,并保存它,它节省一切,除了商号。

这就是我的控制器的样子:

代码语言:javascript
复制
class FreelancersController < ApplicationController
  def index
   @freelancers = Freelancer.all
  end

  def show 
    @freelancer = Freelancer.find(params[:id])
  end

  def new
   @freelancer = Freelancer.new
   @trade = Trade.new
  end

  def create
    @freelancer = Freelancer.new
    @freelancer.firstname = params[:freelancer][:firstname]
    @trade = Trade.new
    @trade.name = params[:trade_attributes]
    @trade.save
    @freelancer.trade = @trade
    @freelancer.save
    redirect_to freelancer_path(@freelancer)
  end

  private

  def freelancer_params
    params.require(:freelancer).permit(:firstname, trade_attributes: [:id, :name])
  end
end

这是我的表格:

代码语言:javascript
复制
<%= form_for(@freelancer) do |f| %>
  <p><%= f.label :firstname %></br>
  <%= f.text_field :firstname %></p>

  <%= f.fields_for :trade do |trade| %>
    <p><%= trade.label :type %>
    <%= trade.text_field :name %></p>
  <% end %>

  <%= f.submit "New Freelancer" %>
<% end %>

自由职业者模式:

代码语言:javascript
复制
class Freelancer < ActiveRecord::Base
  belongs_to :trade
  accepts_nested_attributes_for :trade
end

贸易模式:

代码语言:javascript
复制
class Trade < ActiveRecord::Base
  has_many :freelancers
end

对于自由职业者,它保存id、名字和trade_id。为了交易,它只会保存身份。没有设置名称。我原以为@freelancer.trade = @trade会起作用,因为它在控制台中没有错误,而且实际上保存了所有东西。因此,我不知道如何让它保存在应用程序本身的名称。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-12 20:02:33

您正在尝试的是大规模的分配,但您还没有让Rails为您自由地完成这一任务。在您的create操作中,您应该这样做:

代码语言:javascript
复制
def create
  freelancer = Freelancer.create(freelancer_params)
  redirect_to freelancer_path(freelancer)
end

那应该是你所需要的。

FYI:在您的代码中,您设置了@trade.name = params[:trade_attributes],但params[:trade_attributes]最有可能返回nil。我非常肯定,:trade_attributes将是params[:freelancer]内部的一个关键嵌套。

有关Rails中大量分配的更多信息:http://code.tutsplus.com/tutorials/mass-assignment-rails-and-you--net-31695 (请注意,关于attr_protectedattr_accessible的讨论与您无关,因为您在Rails 4上使用了强参数。本文最后对Rails 4进行了更新)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23617724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档