6

routes.rb ファイルに次のコードがあります。

resources :users  do
  member do
    get :following,:followers
  end
  collection do
    put :activate_email
  end
 end

そして、私は次のようなユーザーの電子メールアクティベーションリンクを持っています:

<%= link_to "Activate",activate_email_users_url(email_token: @user.email_token),method: :put  %>

アクティベート リンクをクリックすると、これが生成される URL です

 http://localhost:3000/users/activate_email?email_token=WWNvMN-r_lXgovrQiDlSSQ

更新: わかりました。問題が何であるかはわかっていると思います。link_to を含む Gmail のアクティベーション メールの HTML ソースを見ると、何もありません。

data-method='put'
. それが問題のようです。PUT ではなく、常にデフォルトの GET リクエストを送信しています。これは私の user_mailer/registration_confirmation.html.erb ファイルです

  <%= javascript_include_tag "application" %>
</head>

次のリンクをクリックしてメールを有効にしてください <%= link_to "Activate",activate_email_users_url(email_token: @user.email_token), method: :put %>

これにより、次のエラーが発生します。

未定義のメソッド「protect_against_forgery?」為に #

したがって、コード <%= javascript_include_tag "application" %>

がこのエラーを引き起こしています。これを回避する方法はありますか?


JsonUnwrappedは使用する注釈であり、複数レベルのネストでも機能します。例えば:

@RunWith(JUnit4.class)
public class Sample {

    @Test
    public void testName() throws Exception {
        SampleClass sample = new SampleClass("value1", "value2", new SubClass("value4", "value5", new SubSubClass("value7")));
        new ObjectMapper().writeValue(System.out, sample);
    }

    @JsonAutoDetect(fieldVisibility=Visibility.ANY)
    public static class SampleClass {
        private String prop1;
        private String prop2;
        @JsonUnwrapped
        private SubClass prop3;

        public SampleClass(String prop1, String prop2, SubClass prop3) {
            this.prop1 = prop1;
            this.prop2 = prop2;
            this.prop3 = prop3;
        }
    }
    @JsonAutoDetect(fieldVisibility=Visibility.ANY)
    public static class SubClass {
        private String prop4;
        private String prop5;
        @JsonUnwrapped
        private SubSubClass prop6;
        public SubClass(String prop4, String prop5, SubSubClass prop6) {
            this.prop4 = prop4;
            this.prop5 = prop5;
            this.prop6 = prop6;
        }

    }
    @JsonAutoDetect(fieldVisibility=Visibility.ANY)
    public static class SubSubClass{
        private String prop7;

        public SubSubClass(String prop7) {
            this.prop7 = prop7;
        }
    }
}

発生します

{"prop1":"value1","prop2":"value2","prop4":"value4","prop5":"value5","prop7":"value7"}
4

3 に答える 3