1

我正在传递一个suggestion_id参数,link_to以便可以将其保存为create不同控制器中操作的一部分。

<%= link_to "I'm interested", new_interested_path(:controller => :interested, 
    :suggestion_id => suggestion.id, :method => :get), :class => 'btn btn-mini' %>

这是生成的 URL:

http://localhost:3000/interesteds/new?controller=interested&method=get&suggestion_id=1

据此,我应该能够使用以下代码来访问我在另一个控制器中的创建操作中的参数suggestion_id

@interested.suggestion_id = params[:suggestion_id]

然而,这不是真的。每当创建“感兴趣的”对象时,suggest_id 就为零。什么给出了,为什么我找不到帮助我解决这个问题的文档?不要告诉我看这里,因为我也已经这样做了。这不是很有帮助。

4

1 回答 1

1

也许试试这样:

<%= link_to "I'm interested", new_interested_path(:suggestion_id => suggestion.id), :method => :get, :class => 'btn btn-mini' %>

new_interested_path方法已经表明它正在使用“感兴趣的”资源,因此不需要(也不应该)传入控制器名称。并且该方法不应该是 URL 的一部分,它是 rails 的 http 方法将请求发送到 URL 时将使用。

您关于suggestion_id为零的观点取决于您要做什么。在您的情况下,您不是在访问create操作,而是new您可以用来初始化对象以进行表单呈现的操作。为了在提交时suggestion_id传递给create操作,您的new.html.erb视图模板需要有一个分配该属性的字段(可能是隐藏字段) - 如下所示:

form_for @interested, interesteds_path do |f|
  ... # other fields
  f.hidden_field :suggestion_id
  f.submit
end

提交此表单时,params[:interested]将包含所有已填充字段的值(包括suggestion_id),并可用于构建和创建新的 ActiveRecord 对象。

您的控制器操作应如下所示:

def new
  @interested = Interested.new(:suggestion_id => params[:suggestion_id])
end

def create
  @interested = Interested.new(params[:interested])
  if @interested.save
    # do something
  else
    # alert user
  end
end
于 2012-10-16T13:26:50.203 回答