Rails: 如何在form_for中硬编码字段

3

我正在开发一个Rails项目,其中包含如下所定义的嵌套资源。

  resources :projects do
    resources :entries
  end

对于entries#new表单,我想把路径projects/project_id/entries/new中的project_id硬编码为form_for中条目视图目录下的project_id字段。当我写下以下代码时:

= f.label :project_id
%br
= f.select :project_id, @project

I get the following error:

undefined method `empty?' for #<Project:0x007fa9adc06120>

有什么办法可以将@project作为字段发送到表单中,而不会出现f.select错误?我认为f.select需要一个集合,所以它不喜欢我只给它一个单一的对象作为第二个参数。
谢谢你的帮助!

2
如果您的表单中的@entry对象构建得很好(带有project_id),则可以使用f.hidden_field :project_id或最终:f.hidden_field :project_id, :value => @project.id - MrYoshiji
@MrYoshiji,这个完美地解决了!谢谢您先生。 - Thalatta
1个回答

3

我猜你在控制器的新方法中有一个@entry,类似于这样:

def new
  @entry = Entry.new
  # etc.

你可以使用这个替代方案:
def new
  @entry = @project.entries.build
  # it will set project_id to the @project.id

同时考虑以下视图:

= f.hidden_field :project_id

如果您不想直接在视图中使用project_id进行初始化:

= f.hidden_field :project_id, value: @project.id

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接