【问题标题】:ruby on rails passing foreign key in a formruby on rails 以一种形式传递外键
【发布时间】:2011-03-29 22:30:58
【问题描述】:

我正在尝试设置一个简单的环境:

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

我正在尝试设置一个环境,当网页的“显示”方法包含微博的“创建”表单时。

最初,Microposts 只与成员相关联 - 这工作正常(在登录时将 member_id 设置为 cookie,并且该 cookie 被堆叠到 Micropost.build 方法)。

这里的问题是我无法传递webpage_id - 我尝试将webpage_id 设置为cookie 并传递它,但这并不好。目前我正在尝试将webpage_id 作为隐藏变量传递。

微博的控制器: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

和网页:显示视图:

<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>

每次我提交创建表单时,我都可以看到 pages_id 被传递但它没有被保存,我得到的错误是:

“找不到没有 ID 的网页”

任何帮助将不胜感激:)

干杯,

达摩

【问题讨论】:

    标签: ruby-on-rails-3 forms foreign-keys associations


    【解决方案1】:

    您可以在您的 routes.rb 文件中将微博设为网页的nested resource

    这样就可以制作表格了:

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

    然后它将 POST 到:

    webpage_microposts POST   /webpage/:webpage_id/microcomments
    

    您将在 Micropost 控制器中访问网页 ID,如下所示:

    @webpage = Webpage.find(params[:webpage_id])
    

    【讨论】:

    • 感谢迈克 - 我现在遇到的问题是我收到一个错误,即未定义与成员关联的“构建”方法。可以像上面提到的那样将一个外键作为 cookie 和一个作为关联传递?
    • 你确定它与这个答案有关吗?我没有对模型做任何事情。
    • 别介意 Mike - 原来我是 Rails 初学者和盲人:-P ... Microposts 控制器中的一种类型。再次感谢您的所有帮助!!!
    猜你喜欢
    • 2013-06-12
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 2010-11-28
    相关资源
    最近更新 更多