Рендеринг не рендеринг правильной страницы - PullRequest
0 голосов
/ 22 июля 2010

Это может быть невозможно ответить, так как здесь, вероятно, слишком много переменных, но я подумал, что я попробую, потому что я всегда нахожу здесь другие ответы.Я все еще плохо знаком с рельсами.

Итак, у меня есть модель / контроллер / вид счетов.Я хочу создать новый счет.Я буду редактировать вещи, которые не должны иметь большого значения, но если они нужны, я могу добавить их - просто не хочу стену текста.

На маршруте:

map.resources :bills

Мой новый метод в контроллере:

def new
    @bill = Bill.new
    @submit_txt = "Create"

    respond_to do |format|
      format.html # new.html.erb
      format.xml  { render :xml => @bill }
    end
  end

моя форма:

<% form_for(@bill) do |f| %>
        <%= f.error_messages %>
 ### form elements here, this all seems fine ####
        <p>
          <%= f.submit @submit_txt %>
        </p>
    <% end %>

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

def create
    is_weekly = false
    is_monthly = false

    @bill = current_user.recurring_bills.build(params[:bill])
    @bill.year = @current_year

    @errors = 'checking this out'

    if @errors.blank?
      logger.info "no errors, supposedly; going to save"

     ### do saving stuff here####
    else
      logger.info "errors not blank"
      render :action => :new
    end
end

Для некоторыхпричина, по которой это всегда рендерится / счета вместо / счета / нового.Раньше это работало, и я не знаю, что я сделал неправильно, но сейчас это не так.Я получаю тот же ответ с render: template => 'bills / new'.Он переходит на нужную страницу с перенаправлением, но затем не заполняет форму со старыми значениями.

Журнал:

Processing BillsController#create (for 127.0.0.1 at 2010-07-21 21:00:47) [POST]
  Parameters: {"commit"=>"Create", "action"=>"create", "authenticity_token"=>"Kc7/iPKbfJBKHHVARuN7K6207tW6Jx4OUn7Xb4uSB8A=", "bill"=>{"name"=>"rent", "month"=>"", "amount"=>"200", "alternator"=>"odd", "day"=>"35", "frequency"=>"monthly", "weekday"=>""}, "controller"=>"bills"}
  User Load (0.6ms)   SELECT * FROM "users" WHERE ("users"."remember_token" = 'dd7082c56f5a252d14e4e68c528eb26551875c647f998c15d16a064cb075d63c') LIMIT 1
errors not blank
Rendering template within layouts/application
Rendering bills/new
Rendered bills/_form (14.5ms)
Rendered layouts/_stylesheets (3.3ms)
Rendered layouts/_header (5.7ms)
Rendered layouts/_footer (0.3ms)
Completed in 174ms (View: 30, DB: 1) | 200 OK [http://localhost/bills]

Надеюсь, у кого-то есть представление о том, что ясделал неправильно, или, я думаю, я начинаю заново.

Ответы [ 2 ]

1 голос
/ 22 июля 2010

запустите rake:routes из командной строки, и вы увидите, как они отображаются.

    bills GET    /bills(.:format)          {:controller=>"bills", :action=>"index"}
          POST   /bills(.:format)          {:controller=>"bills", :action=>"create"}
 new_bill GET    /bills/new(.:format)      {:controller=>"bills", :action=>"new"}
edit_bill GET    /bills/:id/edit(.:format) {:controller=>"bills", :action=>"edit"}
     bill GET    /bills/:id(.:format)      {:controller=>"bills", :action=>"show"}
          PUT    /bills/:id(.:format)      {:controller=>"bills", :action=>"update"}
          DELETE /bills/:id(.:format)      {:controller=>"bills", :action=>"destroy"}

К ресурсам RESTful нужно немного привыкнуть, но в вашем случае \bills с методом post переходит к действию создания.Вы указываете в действии create отображение содержимого шаблона new при вызове render :action => :new - вы фактически не запускаете действие.

0 голосов
/ 22 июля 2010

Попробуйте это:

render :new

Из документов:

Использование render с: action - частая путаница для новичков Rails. Указанное действие используется для определения того, какое представление следует визуализировать, но Rails не выполняет никакого кода для этого действия в контроллере. Любые переменные экземпляра, которые вам требуются в представлении, должны быть настроены в текущем действии перед вызовом render.

Дайте этому шанс и дайте нам знать, как это происходит. Кроме того, если вы визуализируете «new», помните, что ваше новое действие создает новый объект Bill, и для него не будет никаких старых значений для заполнения. И в вашем действии редактирования найдите объект Bill с параметрами, которые вы передаете действию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...