Помещение создать действие для одной модели на странице показа другой - PullRequest
0 голосов
/ 14 июня 2010

Я задал этот вопрос ранее и получил часть пути туда, где мне нужно было быть.

У меня есть простое приложение с тремя таблицами. Пользователи, роботы и получатели. Роботы принадлежат пользователям и Получатели принадлежат роботам.

На странице показа роботов я хочу иметь возможность создавать получателей для этого робота прямо на странице показа роботов.

У меня есть следующий код на странице показа робота, на котором перечислены текущие получатели:

<table>

<% @robot.recipients.each do |recipient| %>
  <tr>
    <td><b><%=h recipient.chat_screen_name %></b> via <%=h recipient.protocol_name</td>

    <td><%= link_to 'Edit', edit_recipient_path(recipient) %>&nbsp;</td>
    <td><%= link_to 'Delete', recipient, :confirm => 'Are you sure?', :method => :delete %></td>
  </tr>
<% end %>
</table>

и теперь у меня есть это в представлении Robot show:

<% form_for(@recipient) do |f| %>
Enter the screen name<br>
<%= f.text_field :chat_screen_name %>
<p>
  <%= f.submit 'Update' %>
</p>
<% end %>

и контроллер роботов добавил к этому также:

@recipient = Recipient.new
  @recipients = Recipient.all

Теперь я вижу поле, которое хочу увидеть, но кажется, что получатель все еще не связан с роботом, который показывает страницу, на которой находится пользователь. Более того, когда у меня есть этот код, перенаправление при создании идет на страницу индекса получателей, а не на страницу показа робота.

У меня есть этот код в контроллере получателей в действии create:

      def create
    @recipient = Recipient.new(params[:recipient])


    respond_to do |format|
      if @recipient.save
        flash[:notice] = 'The new recipient was successfully added.'
        format.html { redirect_to (robot_path(@recipient.robot)) }
        format.xml  { render :xml => @recipient, :status => :created, :location => @recipient }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @recipient.errors, :status => :unprocessable_entity }
      end
    end
  end

Я бы очень признателен за любую дополнительную помощь. Я знаю, что близок к решению, но не совсем там ....:)

Спасибо.

Ответы [ 2 ]

1 голос
/ 15 июня 2010
@recipient = Recipient.new(params[:recipient])

Это создает нового Получателя на основе отправленной формы, но в форме нет ничего, обозначающего робота, которого вы хотите использовать. Поскольку нет никаких параметров [: получатель] [: робот_идентификатор], не может быть @ receient.robot.

Либо попробуйте вложенный ресурс и получите доступ к идентификатору робота из параметров URL-адреса, либо попробуйте передать скрытое поле, содержащее идентификатор робота, и получить к нему доступ из отправленной формы.

Ключевой момент здесь: params [: получатель] содержит только то, что передано из формы, и вы нигде не передаете идентификатор робота.

0 голосов
/ 15 июня 2010

Используйте вложенный маршрут и затем в create: (это немного другой подход, чем другой ответ)

@robot = Robot.find(params[:bug_id])
@recipient = Robot.recipients.new(params[:recipient])

Это автоматически создаст @recipient с robot_id, установленным правильно.

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