質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

584閲覧

シンタックスエラーが解決できません

Arale...3

総合スコア9

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

1クリップ

投稿2020/11/02 14:31

購入機能を実装中です。エラーを探しきれず困っています。

ビュー

<%= form_with model: (@userdonation, item_purchases_path, id: 'charge-form', class: 'transaction-form-wrap', local: true) do |f| %> <%= render partial: 'shared/error_messages', locals: {model: f.object} %> <%# カード情報の入力 %> <div class='credit-card-form'> <h1 class='info-input-haedline'> クレジットカード情報入力 </h1> <div class="form-group"> <div class='form-text-wrap'> <label class="form-text">カード情報</label> <span class="indispensable">必須</span> </div> <%= f.text_field 'hoge', class:"input-default", id:"card-number", placeholder:"カード番号(半角英数字)", maxlength:"16" %> <div class='available-card'> <%= image_tag 'card-visa.gif', class: 'card-logo'%> <%= image_tag 'card-mastercard.gif', class: 'card-logo'%> <%= image_tag 'card-jcb.gif', class: 'card-logo'%> <%= image_tag 'card-amex.gif', class: 'card-logo'%> </div> </div> <div class="form-group"> <div class='form-text-wrap'> <label class="form-text">有効期限</label> <span class="indispensable">必須</span> </div> <div class='input-expiration-date-wrap'> <%= f.text_area 'hoge', class:"input-expiration-date", id:"card-exp-month", placeholder:"例)3" %> <p>月</p> <%= f.text_area 'hoge', class:"input-expiration-date", id:"card-exp-year", placeholder:"例)23" %> <p>年</p> </div> </div> <div class="form-group"> <div class='form-text-wrap'> <label class="form-text">セキュリティコード</label> <span class="indispensable">必須</span> </div> <%= f.text_field "hoge",class:"input-default", id:"card-cvc", placeholder:"カード背面4桁もしくは3桁の番号", maxlength:"4" %> </div> </div> <%# /カード情報の入力 %>
Rails.application.routes.draw do devise_for :users root to: "items#index" resources :items, only: [:new, :create, :show, :edit, :update, :destroy] do resources :purchases, only:[:index, :new, :create] end end
class UserDonation include ActiveModel::Model attr_accessor :post_code, :city, :block_number, :building_name, :phone_number, :prefecture_id, :purchases_id, :item_id, :user_id with_options presence: true do validates :city, :block_number, :phone_number, :prefecture_id validates :post_code, format: {with: /\A[0-9]{3}-[0-9]{4}\z/, message: "is invalid. Include hyphen(-)"} validates :region_id, numericality: { other_than: 0, message: "can't be blank" } end def save Address.create(post_code: post_code, city: city, block_number: block_number, building_name: building_name, phone_number: phone_number, prefecture_id: prefecture_id, purchases_id: purchases_id) Purchase.create(item_id: item_id, user_id: user_id) end end
class PurchasesController < ApplicationController def index end def new @userdonation = UserDonation.new end def create @item = Item.find(params[:id]) @userdonation = UserDonation.new(purchase_params) if @userdonation.valid? @userdonation.save redirect_to action: :index else render action: :new end end private def purchase_params params.require(:user_donation).permit(:post_code, :city, :block_number, :building_name, :phone_number, :prefecture_id).merge(user_id: current_user.id, item_id: params[:item_id]) end end
class Purchase < ApplicationRecord belongs_to :user belongs_to :item has_one :address end
class Address < ApplicationRecord extend ActiveHash::Associations::ActiveRecordExtensions![イメージ説明](703fa421fc100479665e995c58224f50.png) belongs_to_active_hash :region belongs_to :purchase end

イメージ説明
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

この部分、modelがカッコの外に出ています

<%= form_with model: (@userdonation, item_purchases_path

以下のように変えるといかがでしょうか

<%= form_with (model: @userdonation, item_purchases_path

投稿2020/11/02 15:20

hatsu

総合スコア1809

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Arale...3

2020/11/02 15:25

囲ってみましたがダメでした。構文以外に何か原因があるのでしょうか
hatsu

2020/11/02 15:29

あ、すいません。form_withと(の間のスペースを空けないようにするとどうでしょう <%= form_with(model: @userdonation, item_purchases_path
Arale...3

2020/11/02 15:48

ダメでした。ずっと探してるのですが進まなくて
hatsu

2020/11/02 15:52

pathの前にURLが無かったですね、失礼しました。以下はどうでしょう? <%= form_with(model: @userdonation, url: item_purchases_path
Arale...3

2020/11/02 16:01

何度も回答ありがとうございます。やはりダメでしたすいません
hatsu

2020/11/02 16:04

railsを再度立ち上げてもエラーの場所(今は34行目?)も変わっていないでしょうか?
Arale...3

2020/11/02 16:50

はい。エラーの場所は34行目のままです。
hatsu

2020/11/02 16:58

該当のform_withの行を載せておきます。 <%= form_with(model: @userdonation, url: item_purchases_path, id: 'charge-form', class: 'transaction-form-wrap', local: true) do |f| %> ↑が動かなかったら、 カッコを使わないようにした以下での挙動を確認したいです。 <%= form_with model: @userdonation, url: item_purchases_path, id: 'charge-form', class: 'transaction-form-wrap', local: true do |f| %> こちらでも動かなかったら、変更したコードとそのエラー分を質問に追記いただいてもよろしいでしょうか?
Arale...3

2020/11/02 17:12

NoMethodError in Purchases#index Showing /Users/yudaitaguchi/projects/furima-30611/app/views/shared/_error_messages.html.erb where line #1 raised: undefined method `errors' for nil:NilClass <% if model.errors.any? %> <div class="error-alert"> <ul> <% model.errors.full_messages.each do |message| %> <li class='error-message'><%= message %></li> <% end %> 両方同じエラー文でした。
maisumakun

2020/11/02 23:07

SyntaxErrorではなくなっていますね。一歩進んでいます。
hatsu

2020/11/02 23:47

ですね、SyntaxErrorは解決していそうです。 いま出ているエラーは <%= render partial: 'shared/error_messages', locals: {model: f.object} %> ↑のlocalsをlocals: {model: @userdonation}と変えてあげるといいと思います。 form_withのときのバリテーションエラーの表示方法:https://qiita.com/k_senbei/items/a361171f653edcd888ad
Arale...3

2020/11/03 01:32

<% if model.errors.any? %> <div class="error-alert"> <ul> <% model.errors.full_messages.each do |message| %> <li class='error-message'><%= message %></li> <% end %> また同じエラーが出ました
hatsu

2020/11/03 01:39

全く同じエラーメッセージでしょうか? model&.errors&.any? とするとどうでしょうか? もしエラーが出たらメッセージが変わってる可能性があるので質問に追記などでスクショなど載せていただけると助かります
hatsu

2020/11/03 01:50

ありがとうございます。model.errors.any? を model&.errors&.any? に変えるとエラーメッセージが変わる気がします
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問