如何显示嵌套资源" belongs_to" IDS?

时间:2015-09-01 05:33:11

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

而不是popup:org.eclipse.jdt.ui.PackageExplorer它应该说它是嵌套的id:

nil

MissedDate Load (0.5ms) SELECT "missed_dates".* FROM "missed_dates" ORDER BY "missed_dates"."id" DESC LIMIT 1 => #<MissedDate:0x007f8087d86350 id: 12, habit_id: nil, level_id: nil, date_missed: Thu, 10 Sep 2015 00:00:00 EDT -04:00,, created_at: Tue, 01 Sep 2015 01:21:29 EDT -04:00, updated_at: Tue, 01 Sep 2015 01:21:29 EDT -04:00> 属于MissedDate,属于Level

用户点击页面/主页

点击此处
Habit

然后他被带到 missed_dates / new ,其中 _form 呈现:

<%= link_to new_habit_level_missed_date_path({ habit_id: habit, level_id: habit.current_habit_level.id }) do %>
  <span class="glyphicon glyphicon-remove"></span>
<% end %>

MissedDatesController

<%= form_for @missed_date, url: habit_level_missed_dates_path({ habit_id: @habit, level_id: @habit.current_habit_level.id }) do |f| %> # This is probably wrong :/
  <%= f.date_field :date_missed, class: 'form-control', id: 'six', placeholder: 'dd/mm/yyyy' %>
  <%= f.submit %>
<% end %>

路由

  def new
    @habit = Habit.find(params[:habit_id])
    @level = @habit.levels.find(params[:level_id])
    @missed_date = MissedDate.new
  end

  def create
    habit = Habit.find(params[:habit_id])
    habit.missed_days = habit.missed_days + 1
    habit.save!
    level = habit.levels.find(params[:level_id])
    level.missed_days = level.missed_days + 1
    if level.missed_days == 3
      level.missed_days = 0
      level.days_lost += habit.calculate_days_lost + 2
    end
    level.save!
    head :ok # this returns an empty response with a 200 success status code
    @missed_date = MissedDate.new(missed_date_params)
    @missed_date.save
  end

1 个答案:

答案 0 :(得分:2)

通常,当您创建嵌套对象时......您不仅仅是这样创建它:

 @missed_date = MissedDate.new(missed_date_params)

如果它嵌套在习惯下,则在关联对象上创建它。在这种情况下:

@missed_date = level.missed_dates.new(missed_date_params)

否则,你根本没有设置level_id。

如果它必须属于习惯和等级,那么你需要确保其他id在params中。