在我的Rails 3.2项目中,我有一个表单可以在new.html.erb
中的app/views/posts/
中创建新帖子
<%= form_for(@post) do |post_form| %>
...
<div class="field">
<%= post_form.label :title %><br />
<%= post_form.text_field :title %>
</div>
<div class="field">
<%= post_form.label :content %><br />
<%= post_form.text_field :content %>
</div>
<div class="actions">
<%= post_form.submit %>
</div>
<% end %>
然后create
posts_controller.rb
函数
def create
@post = Post.new(params[:post])
if @post.save
format.html { redirect_to @post }
else
format.html { render action: "new" }
end
end
当用户提交帖子时,帖子的title
和content
会添加到Post
模型中。但是,我还想添加到该帖子的另一个字段。对于字段random_hash
(用户没有指定),我想让它成为8个小写字母的字符串,前两个字母是标题的前2个字母,最后6个字母是随机小写字母。我怎么能这样做?
答案 0 :(得分:4)
def create
@post = Post.new(params[:post])
@post.random_hash = generate_random_hash(params[:post][:title])
if @post.save
format.html { redirect_to @post }
else
format.html { render action: "new" }
end
end
def generate_random_hash(title)
first_two_letters = title[0..1]
next_six_letters = (0...6).map{65.+(rand(25)).chr}.join
(first_two_letters + next_six_letters).downcase
end
将它放在你的控制器中。显然,Post模型必须具有random_hash
属性才能工作。
我正在使用Kent Fredric's solution to generate six random letters.