帖子模型有两个字段:title和category_id。在simple_form中我想分配名称并且没关系,但是我想在控制器中分配类别(值将根据动作而不同)。但我有问题,因为每次category_id为null。 我只是这样做:
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
答案 0 :(得分:0)
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
typedef std::pair<std::vector<unsigned>, std::vector<unsigned> > vec_pair;
bool sortingFunc(const pair<unsigned,vec_pair>& a, const pair<unsigned,vec_pair>& b)
{
if((a.second).second.size() == (b.second).second.size()) {
if(std::lexicographical_compare((a.second).second.begin(), (a.second).second.end(), (b.second).second.begin(), (b.second).second.end()))//a<b
{
return true;
}else{
if((a.second).first.size() == (b.second).first.size()) {
return std::lexicographical_compare((a.second).first.begin(), (a.second).first.end(), (b.second).first.begin(), (b.second).first.end());
} else {
// Sort by size.
return (a.second).first.size() < (b.second).first.size();
}
}
} else {
// Sort by size.
return (a.second).second.size() < (b.second).second.size();
}
}
int main()
{
vector<pair<unsigned, pair<vector<unsigned>, vector<unsigned> > > > sbp;
std::sort(sbp.begin(), sbp.end(), sortingFunc);
}
在张贴表单后,加载它并将值保存到(或更新)。表单本身没有将@post的值传递给下一个控制器。如果您不打算在帖子中存在,如果用户没有输入任何信息,那么只在表单POST的控制器中创建它。我提到这个假设您想要设置category_id的原因是因为您希望在下一个控制器操作中保存@post对象时它存在。
答案 1 :(得分:0)
您可以执行@OscillatingMonkey建议的操作,但我强烈建议您使用new
形式的隐藏字段代码:
<%= f.hidden_field :category_id, value: @post.category_id %>
在这种情况下,您的控制器new
将是:
@post = Post.new(category_id: 1)
在save
行动中拨打new
是一件非常糟糕的事情,AFAIK。每次调用new
动作时,无论用户是否继续,都将创建一个新对象。所以我更倾向于使用隐藏字段而不是save
上调用new
方法。