Рубин на рельсах, передавая внешний ключ в виде - PullRequest
0 голосов
/ 30 марта 2011

Я пытаюсь настроить простую среду:

class Member < ActiveRecord::Base
  has_many :microposts, :dependent => :destroy
end

class Webpage < ActiveRecord::Base
  has_many :microposts, :dependent => :destroy
end

class Micropost < ActiveRecord::Base
  attr_accessor :content

  belongs_to :member
  belongs_to :webpage
end

Я пытаюсь настроить среду, которая, когда метод 'show' веб-страницы содержит форму 'create' для Micropost.

Первоначально, микросообщения были связаны только с участниками - и это работало нормально (member_id устанавливается при входе в систему как cookie, и этот cookie укладывается в метод Micropost.build).

Проблемаздесь я не могу передать webpage_id - я попытался установить webpage_id в качестве cookie и передать его, но это не помогло.И в настоящее время я пытаюсь передать webpage_id как скрытую переменную.

Контроллер для Micropost: create

class MicropostsController < ApplicationController
  def create
    @micropost  = current_member.microposts.build(params[:micropost])
    @webpage = Webpage.find(params['webpage_id'])
    @micropost.webpage = @webpage
    if @micropost.save
      flash[:success] = "Micropost created!"
      redirect_to root_path
    else
      @feed_items = []
      render 'pages/home'
    end
  end
end

и веб-страница: show View:

<table class="front" summary="For signed-in members">
    <tr>
      <td class="main">
        <h1 class="micropost">What's up?</h1>
        <%= form_for @micropost do |f| %>
          <%= render 'shared/error_messages', :object => f.object %>
          <div class="field">
            <%= f.text_area :content %>
            <input type="hidden" id="webpage_id" name="micropost[webpage_id]" value="<%= @webpage.id %>"/>
          </div>
          <div class="actions">
            <%= f.submit "Submit" %>
          </div>
        <% end %>
      </td>
    </tr>
</table>

Каждый раз, когда я отправляю форму создания, я вижу пропущенный webpage_id, но он не сохраняется, и я получаю сообщение об ошибке:

"Не удалось найти веб-страницу без идентификатора"

Любая помощь будет принята с благодарностью:)

Ура,

Дамо

1 Ответ

2 голосов
/ 30 марта 2011

Вы можете сделать микросообщений вложенным ресурсом веб-страницы в вашем файле rout.rb.

Таким образом, вы можете сделать форму:

form_for([@webpage, Micropost.new]) do |f|

ЭтоЗатем POST:

webpage_microposts POST   /webpage/:webpage_id/microcomments

И вы получите доступ к идентификатору веб-страницы в вашем контроллере Micropost, как показано ниже:

...