переменная экземпляра в действии контроллера доступна для всех представлений контроллеров? - PullRequest
0 голосов
/ 11 апреля 2010

Я просто пытаюсь распечатать параметры, которые были введены в мою форму. В основном я создаю новую ставку, затем отображаю параметры:

МИГРАЦИИ

class CreateBets < ActiveRecord::Migration

def self.up
    create_table :bets do |t|
    t.integer :accepted ,:default => 0
    t.integer :user_1_id #proposer
    t.integer :user_2_id #receiver
    t.integer :team_1_id #proposer's team
    t.integer :team_2_id #receiver's team
    t.integer :game_id
    t.integer :winner
    t.integer :amount
    t.timestamps
   end
 end

  def self.down
    drop_table :bets
  end
end

CONTROLLER

bets_controller.erb

class BetsController < ApplicationController

  def index
    redirect_to new_bet_path
  end

  def new
    @b=Bet.new
  end

  def create
    @points=params[:points]
    @winner=params[:winner]
  end

end

МНЕНИЯ New.erb

<% facebook_form_for Bet.new do |f| %>
  <%= f.text_field :amount, :label=>"points" %>
  <%= f.text_field :winner, :label=>"WinningTeam" %>
  <%= f.buttons "Bet" %>
<% end %>

create.erb

points:<%= @points  %>
<br>
winner:<%= @winner  %>

Я пытался заставить этот код работать с переменными экземпляра, но он тоже не работал. Где проблема?
Спасибо.

Ответы [ 2 ]

1 голос
/ 11 апреля 2010

Я думаю, что params[:winner] и params[:point] - пустой хеш. Попробуйте добавить это в ваш create.erb:

params: <%= params.inspect %>

Он покажет ваш params хеш, поэтому вы увидите, как к нему добраться.

Еще один совет, почему вы создаете новый объект в действии new, а затем в форме вы делаете это снова? Итак:

<% facebook_form_for @b   do |f| %>

И еще одно, действительно хорошо соблюдать соглашения об именах, поэтому не создавайте @b объект, а @bet.

В действии create вы должны иметь следующую строку:

@bet = Bet.new(params[:bet])

А в виду:

<p>
  points:<%= @bet.points %>
</p>
<p>
  winner:<%= @bet.winner %>
</p>

Если вы используете <br>, лучше использовать <br/>.

Ваше index действие совершенно бесполезно. Было бы лучше, если бы вы переместили все поведение с действия new на index и полностью удалили действие new.

0 голосов
/ 11 апреля 2010

Как указал Клью, мне кажется, что вы становитесь пустыми params[:winner] и params[:point]. Вы можете убедиться в этом, взглянув на журнал вашего сервера.

Вы увидите строку типа

Processing BetsController#create (for 127.0.0.1 at 2010-04-11 20:56:51) [POST]
Parameters: {"your"=>"parameters", "should"=>"apper in this hash"}
...