0

Я хочу призвать создать действие контроллера user_clubs и я сделал так:пары отсутствуют или значение пусто: user_club - рельсы

Посмотреть клубы

<button> 
    <%= link_to "Join Club", user_clubs_path(:user_id => current_user.id, :club_id => @club.id, :join_date => Date.current), :method => :post %> 
</button> 

user_clubs контроллер

def create 
    @user_club = UserClub.new(user_club_params) 

    respond_to do |format| 
     if @user_club.save 
     format.html { redirect_to @user_club, notice: 'User club was successfully created.' } 
     format.json { render :show, status: :created, location: @user_club } 
     else 
     format.html { render :new } 
     format.json { render json: @user_club.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

def user_club_params 
    params.require(:user_club).permit(:user_id, :club_id, :join_date) --->**Error here** 
end 

Ошибка Информация

приложение/контроллеры/user_clubs_controller.rb: 75: в user_club_params' app/controllers/user_clubs_controller.rb:28:in создать» Запрос

Parameters: 

    {"_method"=>"post", 
    "authenticity_token"=>"5Grhb+LIGt9B8XbnEcvg7BZQlDE935KO/aeikZoqxYs=", 
    "club_id"=>"1", 
    "join_date"=>"2014-11-17", 
    "user_id"=>"2" 

} 

клубы и UserClubs разные. Клуб - это модель, представляющая собой команду людей, а user_clubs - это модель, которая представляет отношения «многие ко многим» между пользователями и клубами.

Во-первых, может ли кто-нибудь объяснить мне, как вызов user_clubs_path сопровождается аргументами, знающими, что нужно перейти к созданию действия контроллера user_clubs?

Во-вторых, объективная проблема, почему это ошибка?

ответ

1

Первый вопрос

Из-за вашего определения маршрутов, введите в терминале:

rake routes 

И вы увидите все сгенерированные маршруты и связанные с ним помощников. Первая колонка (выходная рейка) ссылается на имя помощник: user_clubs => user_clubs_path):

Второго вопрос

Вы должны добавить параметры в user_club ключ, потому что вы требуете (по strong_parameters) это «область видимости "params.require(:user_club):

user_clubs_path(:user_club => {:user_id => current_user.id, :club_id => @club.id, :join_date => Date.current}) 

Вы получите в контроллере:

{ 
    "_method" => "post", 
    "authenticity_token" => "...", 
    "user_club" => { 
    "club_id" => "1", 
    "join_date"=> "2014-11-17", 
    "user_id"=> "2" 
    } 
} 
+0

так, это способ создать ресурс, не заполняя форму, не так ли? –

+1

Да, вроде Rails magic :), когда вы добавляете ': method =>: post' Rails преобразует эту ссылку в форму (через внутренние js): http://apidock.com/rails/ActionView/Helpers/UrlHelper/link_to – markets

+0

Спасибо. Я изучаю основы, и я пришел с языков программирования, таких как java и C, и в начале не просто абстрагироваться от этого синтакса. Еще раз спасибо :-) –

1

Параметры должны быть вставлены под ключ user_club. Попробуйте вместо этого:

user_clubs_path(:user_club => {:user_id => current_user.id, :club_id => @club.id, :join_date => Date.current}) 
Смежные вопросы