在控制器中分配一个值

Assign one of values in controller

Post 模型有两个字段:标题和 category_id。在 simple_form 中,我想分配名称,没关系,但我想在控制器中分配类别(值将因操作而异)。但是我有问题,因为每次 category_id 都是空的。 我只是这样做:

 def fun
  @post=Post.new
  @post.category_id=1
 end

它不起作用并且

  @post=Post.new(category_id: 1)

也是。

 <%= simple_form_for @post do |f| %>
    <%= f.error_notification %>
    <%= f.input :title %>
    <%= f.button :submit %>
 <% end %>


class Post < ActiveRecord::Base
     belongs_to :category
end

class Category < ActiveRecord::Base
     has_many :posts
end
def fun
  @post=Post.new
  @post.category_id=1
  @post.save
end

发布表单后,加载它并将值保存到其中(或更新)。表单本身不会将 @post 的值传递给您的下一个控制器。如果你不打算 post 存在,如果用户没有输入任何信息,那么只在你的表单 POST 到的控制器中创建它。我提到这个假设你想要设置 category_id 的原因是因为你希望它在下一个控制器操作中保存 @post 对象时存在。

您可以按照@OscillatingMonkey 的建议进行操作,但我强烈建议您在 new 表单中使用隐藏字段标签:

<%= f.hidden_field :category_id, value: @post.category_id %>

在这种情况下,您的控制器 new 将是:

@post = Post.new(category_id: 1)

new 操作中调用 save 是一件很糟糕的事情,AFAIK。每次调用 new 操作时,无论用户是否继续,都会创建一个新对象。所以我更喜欢使用隐藏字段而不是在 new.

上调用 save 方法