Рендеринг одной модели в «форме редактирования» в других «индексном представлении» - PullRequest
1 голос
/ 30 ноября 2011

У меня есть две модели, команды и игроки. На странице индекса команд у меня есть список игроков, которые не назначены команде. Я пытаюсь создать кнопку, чтобы я мог щелкнуть по одному из игроков без команды и отобразить «форму редактирования» этого игрока на странице указателей команд.

Это моя текущая команда # index:

= link_to 'New Team', new_team_path
= link_to 'New Player', new_player_path

#teamLists
  - @teams.each do |team|
    .team
      .teamtitle
        .teamname
          = link_to truncate(team.name, length: 18), edit_team_path(team)
        .teammoney
          = number_to_currency(team.adjust_money, precision: 0)
      %table
        %tr.tableheading
          %th.namecolumn Player
          %th.poscolumn Pos
          %th.pricecolumn $
        -team.players.each do |player|
          %tr
            %td.namecolumn= player.name
            %td.poscolumn= player.position
            %td.pricecolumn= player.price
        -(1..(10-team.players.length)).each do |x|
          %tr
            %td ---
=render template: 'players/edit'
=render 'players/playerlist'

и это мой игрок # edit

%h1 Nominated Player
= render 'players/form'

= link_to 'Show', @player
= link_to 'Back', players_path

и игроки / форма

  <%= form_for(@player) do |f| %>
     <% if @player.errors.any? %>
      <div id="error_explanation">
        <h2><%= pluralize(@player.errors.count, "error") %> prohibited this player from being saved:</h2>
        <ul>
        <% @player.errors.full_messages.each do |msg| %>
          <li><%= msg %></li>
        <% end %>
         </ul>
      </div>
    <% end %>

    <div class="field">
      <%= f.label :name %><br />
      <%= f.text_field :name %>
    </div>
    <div class="field">
      <%= f.label :position %><br />
      <%= f.text_field :position %>
    </div>
    <div class="field">
      <%= f.label :price %><br />
      <%= f.number_field :price %>
    </div>
    <div class="field">
      <%= f.label :team_id %><br />
      <%= f.select :team_id, Team.all.map { |team| [team.name, team.id] }, { :include_blank =>     true } %>
    </div>
    <div class="actions">
      <%= f.submit %>
    </div>
  <% end %>

В настоящий момент я получаю эту ошибку 'неопределенный метод `model_name' для NilClass: Class 'Я думаю, это потому, что форма не имеет доступа к @player, который определен в действии редактирования игроков. Есть ли способ, как я могу заставить это работать как-то?

1 Ответ

1 голос
/ 30 ноября 2011

Вы можете ссылаться на любое частичное с другой страницы просмотра, и это нормально.Однако, как и в вашем случае, если для этого частичного вам требуются переменные экземпляра (например, @player), вам придется либо: A) объявить его в контроллере команд, либо B) передать его в частичное.

То же самое для A), в контроллере Teams для действия index просто добавьте @player = Player.new или все, что вам нужно.

Для B), выполните:* render: частичный => "my_partial",: locals => {: player => Player.new}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...