在控制器中分配一个值

时间:2015-05-29 18:42:14

标签: ruby-on-rails controller

帖子模型有两个字段: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

2 个答案:

答案 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方法。