2015-11-09 1 views
1

Я следующий вид в RoR:Param из формы не будут сохранены

<%= form_tag(url_for :controller => 'posts', :action => 'create', method: "post") do %> 
    <label>Zawartość</label> 
    <%= text_area_tag(:content) %> 
    <br/> 
    <label>Użytkownik</label> 
    <%= collection_select(:user, :user_id, User.all, :id, :name) %> 
    <br/> 
<% end %> 

и действие контроллера:

def create 
@post = Post.new 
@post.content = params["content"] 
@post.user_id = params["user[user_id]"]; 

@post.save! 
end 

К сожалению, user_id сохраняется нулевой. Странно, что html генерируется должным образом:

<select name="user[user_id]" ... >...</select> 

Почему?

ответ

3

Исправьте создать действие для:

def create 
    @post = Post.new 
    @post.content = params["content"] 
    @post.user_id = params["user"]["user_id"]; 

    @post.save! 
end 

Я предлагаю вам прочитать Accessing elements of nested hashes in ruby.

3

Вы должны придерживаться конвенций:

#config/routes.rb 
resources :posts 

#app/controllers/posts_controller.rb 
class PostsController < ApplicationController 
    def new 
     @post = Post.new 
    end 

    def create 
     @post = Post.new post_params 
     redirect_to @post if @post.save #-> needs "show" action which I can explain if required 
    end 

    private 

    def post_params 
     params.reqire(:post).permit(:content, :user_id) 
    end 
end 

#app/views/posts/new.html.erb 
<%= form_for @post do |f| %> 
    <%= f.text_area :content %> 
    <%= f.collection_select :user_id, User.all, :id, :name %> 
    <%= f.submit %> 
<% end %> 

Это позволит вам получить доступ к url.com/posts/new создать новый post

+0

'redirect_to @ Post' требует также' show' действий. –

+1

Да, но не хотел путать ОП. Если потребуется, я добавлю действие и представление для 'show' –

Смежные вопросы