是可用于所有控制器视图的控制器操作中的实例变量?

时间:2010-04-11 14:17:35

标签: ruby-on-rails rails-activerecord

我只是想打印已输入表单的参数。 基本上我创建了一个新的赌注然后我显示参数:

迁移

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 个答案:

答案 0 :(得分:1)

我认为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操作,那会更好。

答案 1 :(得分:0)

正如克莱指出的那样,对我来说,似乎你变空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"}